一个驱动创建多个设备的问题

一个驱动可以创建多个设备,典型的例子就是楚狂人在TDI驱动教程中创建了TCP,UDP,ICMP的三个过滤设备。

实际上为了能和应用层做IO管理,可能还需要创建一个控制设备,这个设备只负责接收应用层下发的策略。

但我觉得这存在问题,特别是在驱动卸载的时候存在问题。如果驱动只对应一个设备,能保证DriverUnload调用时是独占的,即不存在同步问题。但当对应多个设备时,可能在驱动卸载的时候(调用DriverUnload时),挂接的设备过来的IRP请求,即便做了同步,DriverUnload完成以后驱动被卸掉了,这时候会发生DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS错误。

msdn中说明驱动在卸载前一定要去除自己注册的回调函数,dispatch道理也一样,但是因为一个驱动对应多个设备,保证不了在卸载驱动时被其他设备触发dispatch,所以必定存在概率BSOD。

测试了《寒江独钓》里的关于tdi_fw,多次加载卸载出现蓝屏,通过windbg查看是发生在dispatch函数开头,应该就是这个问题导致。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值