阅读:2085回复:9
句柄打开时拨掉USB设备的问题
我一个驱动, 用的老式 device name + symble link 的方式和应用程序通讯的。
现在发现一个问题, 就是如果应用程序已经用 CreateFile 打开了一个到设备的句柄, 这时拨掉USB设备。 这时再插入USB设备, 就再也无法用那个symble link 了。 但驱动运行正常, 只是无法再用 CreateFile 连接上了。 估计原因是因为 Symble link 正在使用时, 驱动卸载时没有成功删除 Symble Link. 有谁有过类似的经验吗? |
|
沙发#
发布于:2001-09-05 19:22
我也碰到这个问题了,而且只要你不closefile,相应驱动程序例程都在内核运行,为此我找了Cypress公司的一些原代码,它们是这样做的。
CreateFile(); 然后相应的IO操作 CloseFile(); 这样的话,当你拔掉设备后,驱动程序的UnLoad()例程,就会工作,把你的 symlink删除掉(当然这个例程里边你要有删除symlink的语句)。 |
|
板凳#
发布于:2001-09-06 01:19
这种一打开马上就关掉当然没什么问题了。
但是如果打开了不关掉, 就是在打开过程中拨掉了设备, CloseHandle() 也不起作用了。 |
|
地板#
发布于:2003-07-10 10:55
呵呵,我也遇到这样的问题,而且如果应用程序读写数据失败的时候,再次启动应用程序,读写仍然失败,只有重新拔掉usb设备,再启动应用程序了。
|
|
地下室#
发布于:2003-07-10 14:22
驱动中对热插拔相应没有做好。
|
|
|
5楼#
发布于:2003-07-10 15:27
具体在驱动程序的那个部分处理这些热插拔的问题呢,在remove_device?
|
|
6楼#
发布于:2004-09-15 11:40
你的问题解决了没有,我也遇到了这样的问题。
|
|
|
7楼#
发布于:2007-03-01 15:25
我也是遇到这个问题,createfile - closehandle的方法只在应用层解决的,但解决的不彻底,我想在驱动层来解决不知道能否解决?
|
|
|
8楼#
发布于:2007-03-01 15:51
我也遇到过,偶尔还会出现蓝苹,事实说明内核以为设备一直存在,我想在驱动中添减意外删除是个好办法,cypress的GPD没有实现这个
|
|
|
9楼#
发布于:2007-03-01 16:32
在驱动中添加意外删除函数,在这个函数中具体要作那些事呢,当设备正在使用时驱动不能强行关闭设备啊
|
|
|