本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 4410|回复: 5

关于IoDetachDevice 的问题。 [复制链接]

Rank: 1

发表于 2011-5-15 04:22:34 |显示全部楼层
学习了klog 监视键盘的代码,发现一个问题。
VOID DriverUnload(PDRIVER_OBJECT pDriverObj)
{
      PDEVICEEXSION pDevSion =(PDEVICEEXSION )pDriverObj->DeviceExtension;
      IoDetachDevice(pDevSion->pTargetObj );
      IoDeleteDevice(pDriverObj->DeviceObject);
}
卸载完驱动的时候在按下按键就是蓝屏。我分析是 挂接的设备处理的 IRP_MJ_READ 中仍然设置IoSetCompletionRoutine 完成函数,但是驱动被卸载了。没有处理的完成函数了,所以蓝屏了。不知道对不对。如果不对。到底是什么原因???

Rank: 1

发表于 2011-5-15 16:49:18 |显示全部楼层
有木有把引用的对象都 Derefence掉?

Rank: 2

发表于 2011-5-15 19:04:37 |显示全部楼层
detach后可以先delay一下

Rank: 2

发表于 2011-5-15 19:35:34 |显示全部楼层
你可以实现一个队列,在Read的时候记录下IRP,在你的完成例程里移除。在卸载的时候,先Detach,然后取消所有在队列里的IRP就可以了。为了保险起见,你可以使用Remove lock。

Rank: 2

发表于 2011-5-15 22:31:27 |显示全部楼层
嗯,三楼正解

Rank: 1

发表于 2011-5-16 01:17:51 |显示全部楼层
弄明白了。三楼正解。
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-7-19 15:09 , Processed in 0.028907 second(s), 8 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部