阅读:1799回复:4
过滤器如何在2000下防止过滤器attach两次?
我是通过程序控制挂载指定设备,因此可能会被挂两次,防止的方式是通过调用IoGetLowerDeviceObject然后依次遍历设备堆栈,检查过滤器是否已经安装。
但是这个函数在2000上不能使用。 如果通过检查ioattachdevice的返回值是否已经记录,这种情况在第一次挂载然后又有第三方的驱动挂载后,又会出问题。 还有其他什么办法呢? |
|
|
沙发#
发布于:2009-08-31 21:50
((PEXTENDED_DEVOBJ_EXTENSION) (SourceDevice-> DeviceObjectExtension)) ->AttachedTo
取得要挂载的设备栈顶,用DeviceObjectExtension的AttachedTo遍历设备堆栈,检查设备扩展或拥有该设备的驱动名不可以吗 如果知道总线驱动名,枚举设备,由AttachedDevice指针和NextDevice指针枚举更可靠 请高手指教 |
|
板凳#
发布于:2009-09-01 09:41
噢,这种方法正好和我的方法相反,可以起到同样的效果。不过这个PEXTENDED_DEVOBJ_EXTENSION结构是是未定义的,使用这个方法会不会在不同的操作系统下有问题?
|
|
|
地板#
发布于:2009-09-01 09:50
PEXTENDED_DEVOBJ_EXTENSION这个结构肯定不行,不是所有的驱动都是系统的,有可能是用户定义的。看到在reactos里面有定义,和iocreatedeviceobject的实现。
|
|
|
地下室#
发布于:2009-09-01 09:50
btw:
总线是不定的。 |
|
|