阅读:1554回复:10
拔下设备98就不能关机了,怎么回事?
我定义了OnRemoveDevice过程,在这个过程中使用对98执行了以下操作:
1.删除Symbol Link Name 2.IoUnregisterShutdownNotificatin(Pdo); 3.使用IoDeleteDevice删除设备 4.ExFreePool释放在AddDevice中分配的非分页内存。 但98关机时花屏,相同的程序在2k和xp下就没问题,请各位看看我有哪些疏漏造成没有把全部的资源释放掉造成不能关机,谢谢各位! |
|
|
沙发#
发布于:2001-12-06 17:05
这个问题原来虽然有人问过,但并没有解决问题,为什么连回答的都没有?太简单了?
|
|
|
板凳#
发布于:2001-12-06 17:17
我查看以前的帖子,提到要加入DecrementOutstandingRequest,但我跟踪后发现这个函数在OnRemoveDevice时会被自动执行的,它包含在kpnpdev.cpp中了,是不是和它无关?
在OnRemoveDevice中我使用m_RequestConter.Reset();将m_RequestCounter进行初始化,变成了0,然后又进行了我第一贴中的操作,还是不能关机。 |
|
|
地板#
发布于:2001-12-10 16:12
这个问题是太简单了?怎么没有人肯帮忙?寒心呀! :(
|
|
|
地下室#
发布于:2001-12-12 15:34
斑竹:出手帮忙吧!
|
|
|
5楼#
发布于:2001-12-18 10:10
我自己没有碰到过,能说什么呢?
|
|
|
6楼#
发布于:2001-12-18 11:44
我的程序是用ds写的,我想把Irp从队列中删除然后设置为STUTUS_CANCELED,但为什么不能从队列中删除呢?
|
|
|
7楼#
发布于:2001-12-18 12:05
我的程序是用ds写的,我想把Irp从队列中删除然后设置为STUTUS_CANCELED,但为什么不能从队列中删除呢? IoCompleteRequest |
|
8楼#
发布于:2001-12-18 15:30
这一句肯定要有的,但在执行这一句之前要做什么工作呢?比如spinlock等如何操作呢?
|
|
|
9楼#
发布于:2001-12-18 15:44
这是一段代码,是使用ds做的,其中的bRemoved部分可能由于少了一些对IRP的操作造成RemoveSpecificEntry(I)未能正确执行,所以里面的过程也没能执行,请各位朋友帮忙看看少了什么操作?
------------------------------ KDeviceQueue dq(DeviceQueue()); dq.Unlock(); CancelSpinLock::Release(I->CancelIrql); BOOLEAN bRemoved = dq.RemoveSpecificEntry(I); CancelSpinLock::Release(I->CancelIrql); if ( bRemoved ) { t<<\"Cancel: bRemoved OK!\\n\"; I.Information() = 0; I.Complete(STATUS_CANCELLED); } --------------------------------- |
|
|
10楼#
发布于:2001-12-20 21:23
到msdn.microsoft.com去,用usb做关键词查找,有专门对这个问题的回答。
|
|