xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1901回复:9

在Dispatch Routine中Pending一个Irp,其导致的执行顺序是怎样的?非常重要

楼主#
更多 发布于:2003-04-16 15:46
用户被禁言,该主题自动屏蔽!

最新喜欢:

jinghuirenjinghu...
domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-17 09:04
我也想知道
xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-04-19 19:33
用户被禁言,该主题自动屏蔽!
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-20 10:03
 有这么几个原则:

1. 只有驱动程序栈中的一个调用了IocompleteIrp时,上层的完成历程才会被调用。
2. 只有完成历程不返回 STATUS_MORE_PROCESSING_REQUIRED
的时候 ,上层的完成历程才会被调用。
3.只有所有的完成历程都被调用,并不返回STATUS_MORE_PROCESSING_REQUIRED
的时候,Irp才会被完成。

xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-04-20 19:35
用户被禁言,该主题自动屏蔽!
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-21 09:13
非常感谢ppl的回帖。
但,我还有两个不明白的是:
按照大大你的说法,下层如果是IrpMarkPending的话,完成历程根本就不会被调用是这样的么?
那么,PendingReturned是怎么被设置的?

看看ddk得文档 IoMarkIrpPending。

如果一个Irp当时或者是IrpMarkPending,或者是完成历程返回STATUS_MORE_PROCESSING_REQUIRED 而导致这个Irp没有完成,是不是最后这个Irp也一定要完成的,只是在其他时机,是这样的么?

你写一个驱动程序不要完成IRP,看看会发生什么事情就知道了。


劝你仔细看看ddk得文档啊。
xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-04-22 17:23
用户被禁言,该主题自动屏蔽!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-24 21:28
有几个规则.
1. 在调用路径中IRP如果不返回STATUS_PENDING. PENDING RETURND标记被IO MANAGER忽略.
2. 返回STATUS_PENDING, PENDING RETURNED标记被IO MANAGER处理. 当前线程不是触发IRP的线程时, IO MANAGER靠这个标记来引发一个APC, 将数据传送给IRP对应的线程.

IRP如果被COMPLETE多次导致的蓝屏, 一般是下层驱动设定了PENDNIG RETURNED标志, 但是上层驱动没有返回STATUS_PENDING, 中间的驱动有至少1个在COMPLETION ROUTINE中返回了STATUS_MORE_PROCESS_REQUIRED所导致. 这是DRIVER的大陷井之一.

[编辑 -  4/24/03 by  lu0]
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-25 16:27
这个贴子不错,大家看看,呵呵
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-04-27 13:23
用户被禁言,该主题自动屏蔽!
游客

返回顶部