generalos
驱动牛犊
驱动牛犊
  • 注册日期2008-10-23
  • 最后登录2011-04-20
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望477点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1727回复:4

过滤器如何在2000下防止过滤器attach两次?

楼主#
更多 发布于:2009-08-31 18:06
我是通过程序控制挂载指定设备,因此可能会被挂两次,防止的方式是通过调用IoGetLowerDeviceObject然后依次遍历设备堆栈,检查过滤器是否已经安装。
但是这个函数在2000上不能使用。
如果通过检查ioattachdevice的返回值是否已经记录,这种情况在第一次挂载然后又有第三方的驱动挂载后,又会出问题。
还有其他什么办法呢?
驱网无线,快乐无限
ufo1cn
驱动牛犊
驱动牛犊
  • 注册日期2006-03-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望102点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-08-31 21:50
  ((PEXTENDED_DEVOBJ_EXTENSION) (SourceDevice->  DeviceObjectExtension)) ->AttachedTo

取得要挂载的设备栈顶,用DeviceObjectExtension的AttachedTo遍历设备堆栈,检查设备扩展或拥有该设备的驱动名不可以吗
如果知道总线驱动名,枚举设备,由AttachedDevice指针和NextDevice指针枚举更可靠
请高手指教
generalos
驱动牛犊
驱动牛犊
  • 注册日期2008-10-23
  • 最后登录2011-04-20
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望477点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-09-01 09:41
噢,这种方法正好和我的方法相反,可以起到同样的效果。不过这个PEXTENDED_DEVOBJ_EXTENSION结构是是未定义的,使用这个方法会不会在不同的操作系统下有问题?
驱网无线,快乐无限
generalos
驱动牛犊
驱动牛犊
  • 注册日期2008-10-23
  • 最后登录2011-04-20
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望477点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-09-01 09:50
PEXTENDED_DEVOBJ_EXTENSION这个结构肯定不行,不是所有的驱动都是系统的,有可能是用户定义的。看到在reactos里面有定义,和iocreatedeviceobject的实现。
驱网无线,快乐无限
generalos
驱动牛犊
驱动牛犊
  • 注册日期2008-10-23
  • 最后登录2011-04-20
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望477点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-09-01 09:50
btw:
总线是不定的。
驱网无线,快乐无限
游客

返回顶部