阅读:1793回复:6
请教:未完成IRP如何处理
问题是这样:
驱动程序向设备发送读数据指令,由于某种原因设备没有反映。这样用户程序就一直处于等待中。我现在的想法是:在驱动中加入定时器,如果读数据指令在500ms没反映,驱动程序认为该IRP处理错误。这样用户程序就不用一直等待。那么如何处理这个未完成的IRP? |
|
沙发#
发布于:2007-06-28 23:30
我是这样做的,不知道合适否?
首先在定时器的回调历程中调用IoCancelIrp,取消这个Irp。这时IoManager会调用这个Irp的完成历程,在完成历程中释放分配的内存。然后在读写命令ID中调用IoCompleteIrp。从效果来看,达到了目的。 但是不能在定时器回调历程中调用IoCompleteIrp,这样做就蓝屏。 还有一种取消IRP的方法,用新的IRP队列代替原来的IRP队列,新的没有要取消的IRP。这种方法我还不太理解 |
|
板凳#
发布于:2007-07-01 00:54
谢谢楼上兄弟了,我试一试。
|
|