tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:1711回复:5

(敬请关注)usb设备对象句柄没有全部close的情况下,拔掉设备产生的问题!

楼主#
更多 发布于:2004-08-06 23:34
问题陈述:
做了一个usb设备的驱动程序,在应用程序还持有usb设备对象句柄的情况下(此时已没有i/o操作),拔掉usb设备,然后再插上usb设备,会导致usb设备无法正常加载。IoCreateDevice设备对象的时候没有给DeviceName,而是IoRegisterDeviceInterface注册了一个设备接口类guid。跟踪此过程,发现pnp管理器没有发送IRP_MN_REMOVE_DEVICE的pnp请求,而必须等到应用程序close所有设备对象句柄之后,才会发出。

请问,如何在应用程序持有设备对象句柄的情形下,仍然彻底完成对驱动程序的卸载?请高人指点迷津!

省元坊
zfw
zfw
驱动小牛
驱动小牛
  • 注册日期2001-12-16
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-11 09:26
笨办法:在应用程序中定时检测设备是否存在,如果不存在了就CloseHandle
zfw
cockliujun
驱动牛犊
驱动牛犊
  • 注册日期2003-08-21
  • 最后登录2008-06-25
  • 粉丝0
  • 关注0
  • 积分860分
  • 威望16点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-11 11:39
只有在所有设备对象句柄都被释放以后,才会 IRP_MN_REMOVE_DEVICE,这在 DDK 的文档里已经写的很清楚了。所以你想在“在应用程序持有设备对象句柄的情形下,仍然彻底完成对驱动程序的卸载”是不可能的。
但是在usb设备被子突然拔出时驱动会收到 IRP_MN_SURPRISE_REMOVAL,你可以在处理这个 IRP 时做些动作帮助应用程序释放句柄。
DDK 中写出了一种方式,就是在 IRP_MN_SURPRISE_REMOVAL 时IoSetDeviceInterfaceState(FALSE)。在应用程序中可以截获这个事件,释放句柄。
jarod_jy
驱动牛犊
驱动牛犊
  • 注册日期2006-12-27
  • 最后登录2012-06-17
  • 粉丝0
  • 关注0
  • 积分332分
  • 威望35点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-02 10:33
按照2楼的方法,在驱动中是不是说不能完全解决这个问题,而要在应用层来解决?
      有没有可能在驱动中解决这个问题,因为应用层不是我来编写?
耕一块贫瘠的土地
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
地下室#
发布于:2007-03-02 11:17
引用第2楼cockliujun2004-08-11 11:39发表的“”:
只有在所有设备对象句柄都被释放以后,才会 IRP_MN_REMOVE_DEVICE,这在 DDK 的文档里已经写的很清楚了。所以你想在“在应用程序持有设备对象句柄的情形下,仍然彻底完成对驱动程序的卸载”是不可能的。
但是在usb设备被子突然拔出时驱动会收到 IRP_MN_SURPRISE_REMOVAL,你可以在处理这个 IRP 时做些动作帮助应用程序释放句柄。
DDK 中写出了一种方式,就是在 IRP_MN_SURPRISE_REMOVAL 时IoSetDeviceInterfaceState(FALSE)。在应用程序中可以截获这个事件,释放句柄。

说得好!
mcu_boy
jarod_jy
驱动牛犊
驱动牛犊
  • 注册日期2006-12-27
  • 最后登录2012-06-17
  • 粉丝0
  • 关注0
  • 积分332分
  • 威望35点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-02 16:17
在驱动中能否释放打开设备的句柄呢?
耕一块贫瘠的土地
游客

返回顶部