IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
阅读:1793回复:6

请教:未完成IRP如何处理

楼主#
更多 发布于:2007-06-27 13:34
问题是这样:
           驱动程序向设备发送读数据指令,由于某种原因设备没有反映。这样用户程序就一直处于等待中。我现在的想法是:在驱动中加入定时器,如果读数据指令在500ms没反映,驱动程序认为该IRP处理错误。这样用户程序就不用一直等待。那么如何处理这个未完成的IRP?
IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-28 23:30
我是这样做的,不知道合适否?
  首先在定时器的回调历程中调用IoCancelIrp,取消这个Irp。这时IoManager会调用这个Irp的完成历程,在完成历程中释放分配的内存。然后在读写命令ID中调用IoCompleteIrp。从效果来看,达到了目的。
  但是不能在定时器回调历程中调用IoCompleteIrp,这样做就蓝屏。
  还有一种取消IRP的方法,用新的IRP队列代替原来的IRP队列,新的没有要取消的IRP。这种方法我还不太理解
IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-01 00:54
谢谢楼上兄弟了,我试一试。
游客

返回顶部