ylinux
驱动牛犊
驱动牛犊
  • 注册日期2007-10-09
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望56点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:4362回复:3

关于IoCompleteRequest的疑问?

楼主#
更多 发布于:2007-10-12 13:25
          究竟是所有在驱动堆栈里的驱动都对IRP调用一次IoCompleteRequest之后,I/O管理器才执行对应用返回.
          还是有一驱动调用IoCompleteRequest完成IRP,I/O管理器就执行对应用返回.
ylinux
驱动牛犊
驱动牛犊
  • 注册日期2007-10-09
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望56点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-15 09:33
     请高人指路啊!!!!
bamu1984z
驱动牛犊
驱动牛犊
  • 注册日期2006-09-18
  • 最后登录2008-07-24
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望78点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-16 22:34
引用第0楼ylinux于2007-10-12 13:25发表的 关于IoCompleteRequest的疑问? :
          究竟是所有在驱动堆栈里的驱动都对IRP调用一次IoCompleteRequest之后,I/O管理器才执行对应用返回.
          还是有一驱动调用IoCompleteRequest完成IRP,I/O管理器就执行对应用返回.


只要某一个驱动调用了 iocompleterequest ,该 irp 就会完成, 这个函数回从底向上,依次看各个堆栈是否安装有回调函数,是的话调用之 ~~  , 如果你的驱动在回调函数中返回了 IRP_NEED_MORE_PROCESS , 你的驱动需要自己再调一次 iocompleterequest ........ 看书
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-17 00:15
通常,最底层的驱动必须要调用IoCompleteRequest来完成一个IRP。当调用IoCompleteRequest后,该IRP的完成函数会依次被调用,除非某一个完成函数返回了STATUS_MORE_PROCESSING_REQUIRED。

这意味着,如果某个中间层次的驱动的完成函数返回了STATUS_MORE_PROCESSING_REQUIRED,而它自身又不是该IRP处理的终点,那么它还应该调用一次IoCompleteRequest,以便更上层的驱动能够继续处理该IRP。
游客

返回顶部