阅读:1300回复:3
USB复合设备拔除导致Windows死机,求解驱动问题
我在开发一个USB复合设备,U盘和COM口并存的,但拔除的时候偶尔会导致Windows死机(就是windows画面不动,鼠标键盘无反应的那种)。
我想问一下拔除设备的时候,驱动是否工作?如果工作的话,U盘和COM口能否不同时删除(现在的情形是拔除时同时消失,我想让U盘先消失,串口后删除),这个延时应该加在哪个函数?使用KeDelayExecutionThread是否合适? 注:主要问题是找不到拔除设备的时候工作的驱动代码是哪个函数。。。。 我是个初学者,菜鸟一个,希望各位大虾指点! |
|
驱动小牛
![]() |
沙发#
发布于:2008-07-08 10:05
IRP_MJ_PNP的处理函数里面的IRP_MN_SURPRISE_REMOVAL处理部分,真羡慕你有源码,和你做的事情差不多,我的复合设备是T卡盘加Modem,可惜全部要自己写。
|
驱动小牛
![]() |
板凳#
发布于:2008-07-08 10:13
在这里我的处理顺序是这样的
1、取消所有I/O 2、停止所有驱动开的系统线程 3、将USB的管道Abort 4、杀掉所有Pending Irp 5、处理电源管理 6、释放资源 最后 PIrp->IoStatus.Status = STATUS_SUCCESS; IoSkipCurrentIrpStackLocation(PIrp); return IoCallDriver(pDevExt, pLowerDevObj, PIrp); |
地板#
发布于:2008-07-10 14:27
case IRP_MN_SURPRISE_REMOVAL:
这个里面我没有找到分别停止U盘和COM口的代码呀。我在这加了延时,结果U盘和COM口的删除都发生了延时,但还是同时的,我是想让他们有个先后顺序。 嘿嘿,我这边是U盘,T卡,Modem并存,我们工作还真的像哦!问一下,你那里拔除设备不死机吗? 你用的什么平台?方便透露的话:) |
|