这一周师兄又给了我新的任务:现在进行的项目中网络访问控制上层操作不太方便,比如要禁止访问IP段2——9,11——15,19——46,上层就要设置访问策略三次(IP段只能设置连续的),现在要我修改底层网络驱动以便上层能这样方便操作:先设置IP10,16——18能够被访问,然后设置2——46段不可访问,越先加的访问策略优先级越高,这样后面加的策略就不能覆盖前面的。由于这次的任务当前项目要用,而以前师兄给的任务都是实验性的,因此我兴致比较高,马上就动工了。经师兄指点,我打算这样实现,底层驱动维护的IP控制段结构体加了一个字段,IsAccess,控制本IP段是否访问(以前的实现是只要该IP段插入链表就不可访问),然后访问控制函数里加一个判断条件,如果IsAccess为TRUE,该IP放行,马上退出循环,不再向后寻找链表的其余部分,这样就实现了后加的IP段不能覆盖以前的IP段,当然,中间层DLL和上层控制界面也要做一些修改,添加IP段的时候加一个Checkbox以指示该IP段是可访问还是不可访问,不过这都是简单的事情。本来打算两个小时搞定的,看代码和写程序的确只用了两个小时,可是调试花了我大半下午,修改了驱动要重启加载才能生效看效果,其中还蓝屏了四五次(幸好我用的虚拟机),终于在今天晚上7点大功告成。
这次驱动调试主要是用DbgView(感谢师兄教我用这个有用的工具),不断地跟踪上层和驱动,并打印我特意在代码中插入的字串,让我找到了错误。
由于WinDbg的高级命令还不熟,再加上驱动源码级调试技巧还没完全掌握,所以只能用这种笨办法了。呵呵,虽然一个小程序,但还是很有成就感的。 写于2007-09-19晚
windows驱动开发学习进展----四
最新推荐文章于 2024-04-18 09:47:45 发布