mqfrog
驱动牛犊
驱动牛犊
  • 注册日期2008-07-07
  • 最后登录2009-08-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1300回复:3

USB复合设备拔除导致Windows死机,求解驱动问题

楼主#
更多 发布于:2008-07-07 16:15
我在开发一个USB复合设备,U盘和COM口并存的,但拔除的时候偶尔会导致Windows死机(就是windows画面不动,鼠标键盘无反应的那种)。
我想问一下拔除设备的时候,驱动是否工作?如果工作的话,U盘和COM口能否不同时删除(现在的情形是拔除时同时消失,我想让U盘先消失,串口后删除),这个延时应该加在哪个函数?使用KeDelayExecutionThread是否合适?
注:主要问题是找不到拔除设备的时候工作的驱动代码是哪个函数。。。。
我是个初学者,菜鸟一个,希望各位大虾指点!
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-07-08 10:05
IRP_MJ_PNP的处理函数里面的IRP_MN_SURPRISE_REMOVAL处理部分,真羡慕你有源码,和你做的事情差不多,我的复合设备是T卡盘加Modem,可惜全部要自己写。
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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);
mqfrog
驱动牛犊
驱动牛犊
  • 注册日期2008-07-07
  • 最后登录2009-08-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-10 14:27
case IRP_MN_SURPRISE_REMOVAL:
这个里面我没有找到分别停止U盘和COM口的代码呀。我在这加了延时,结果U盘和COM口的删除都发生了延时,但还是同时的,我是想让他们有个先后顺序。
嘿嘿,我这边是U盘,T卡,Modem并存,我们工作还真的像哦!问一下,你那里拔除设备不死机吗?
你用的什么平台?方便透露的话:)
游客

返回顶部