windows中的过滤绑定如何动态卸载

来源:互联网 发布:淘宝优惠劵网站源码 编辑:程序博客网 时间:2024/06/10 10:17

windows中的过滤绑定如何动态卸载


    前面只说了如何绑定,但是没说如何解除绑定。如果要把这个模块做成可以动态卸载的模块,则必须提供一个卸载函数。我们应该在卸载函数中完成解除绑定的功能;否则,一旦卸载一定会蓝屏。
    这里涉及到3个内核API:一个是IoDetachDevice,负责将绑定的设备解除绑定;另一个是IoDeleteDevice,负责把我们前面用IoCreateDevice生成的设备删除掉以回收内存;还有一个是KeDelayExecutionThread,纯粹负责延时。这三个函数的参数相对简单,这里就不详细介绍了,需要的读者请查阅WDK的帮助。
    卸载过滤驱动有一个关键的问题:我们要终止这个过滤程序,但是一些IRP可能还在这个过滤程序的处理过程中。要取消这些请求非常的麻烦,而且不一定能成功。所以解决方案是等待5秒来保证安全地卸载掉。只能确信这些请求会在5秒内完成,同时等待之前我们已经解除了绑定,所以这5秒内不会有新请求发送过来处理。这对于串口而言是没问题的,但是并非所有的设备都如此。所以读者在后面的章节会看到不同的处理方案。

 

更多精彩资源:
web开发专栏:http://blog.csdn.net/broadviewwebdev
数据库开发专栏:http://blog.csdn.net/broadviewdatabase
程序设计专栏:http://blog.csdn.net/broadviewprograming
安全专栏:http://blog.csdn.net/BroadviewSecurity