WinDDK基于规则的防火墙设计续

经过两天的摸索和尝试,实现了简单的过滤规则设置,但是还不够完备。先简单总结一下。

关于基于规则的防火墙设计中的数据流动上次已经说明过了,但是有些问题。首先,规则设置客户端、驱动层和中间层是3个平行的层次,如果不是数据交换,三层其实是没有必然关联的。我在中间层加入了规则队列,初始化的问题一直没搞明白,所以最初的想法是启动用户界面后和驱动层交互时,然后进行中间层规则队列的初始化。但是,事实证明这是不对的……服务加载后,服务会实时运行,此时没有运行客户端也就是不可能进行规则队列初始化……结果就蓝屏了若干次……

经过仔细阅读passthru.c的源码后,经同学指点,终于找到了合适的初始化点。我开始一直想找到进入驱动的函数入口,苦于没有驱动开发经验,居然直接忽视了DriverEntry这个函数……找到了合适的入口,初始化也就迎刃而解了。

但是苦逼的经历还没有过去。

当客户端和中间层的相关设计完成后,进入analysispacket.c设计后,问题就出来了。这个文件中主要是实现对具体协议的规则过滤。可是我在编码时忽略了一个关键变量的初始化,导致第一次进入后变量值未定,进而引发指针越界,蓝屏又一次发生。结果排查了一上午,snapshot搞了十几个才想明白……真是大问题没有,小问题不断。

好在现在问题都一一解决了。下面要做的就是完善规则的定义,如何基于规则进行过滤。如果有时间还可以考虑规则队列的维护,比如说规则判冲突等等。

你可能感兴趣的:(WinDDK基于规则的防火墙设计续)