阅读:1248回复:1
突然移除设备时IoCancelIrp返回0并出现错误,求助!
我用DS开发的一个USB驱动,看起来工作很正常,但是在突然拔出设备的时候,SoftICE弹出Error,提示:BOOL:0 is an invalid return value for IoCancelIrp.
注意IoCancelIrp是BOOLEAN的返回值,返回0就是FALSE无可厚非。 我的USB Interrupt接受使用的是轮询的IRP,即发起一个读请求,然后等待返回。如果没有返回就一直轮询的等下去。如果有数据读回就去处理这些数据。 当我使用设备管理器禁用设备时,会进入到Halt例程,设置一个bHalt的标志,这时正处理轮询等待的IRP们会发现这个标志,在完成例程的一个计数器自减到0,进而设置一个事件通知Halt可以IoCancelIrp了。在Halt里边IoCancelIrp依次Cancel每个未完成的Irp,最后删除这些Irp。以上步骤都会依次实施并正常停用。 但是当我突然移除设备时,跟踪发现每个未完成(Outstanding)的Irp都会在Irp.status()置0xC0000120(是Cancel而不是disconnect)。然后进入了Halt例程,依次IoCancelIrp(每个轮询的Irp)--这时随着cancel每个Irp,都会弹出Error,提示:BOOL:0 is an invalid return value for IoCancelIrp。 [编辑 - 11/22/04 by mboma] |
|
沙发#
发布于:2004-11-22 23:27
论坛真是宝地啊 每次有问题一发帖自己灵感就来了 问题已经解决!
BoundsChecker在作怪! |
|