阅读:1901回复:9
在Dispatch Routine中Pending一个Irp,其导致的执行顺序是怎样的?非常重要用户被禁言,该主题自动屏蔽! |
|
最新喜欢:![]() |
沙发#
发布于:2003-04-17 09:04
我也想知道
|
|
板凳#
发布于:2003-04-19 19:33
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2003-04-20 10:03
有这么几个原则:
1. 只有驱动程序栈中的一个调用了IocompleteIrp时,上层的完成历程才会被调用。 2. 只有完成历程不返回 STATUS_MORE_PROCESSING_REQUIRED 的时候 ,上层的完成历程才会被调用。 3.只有所有的完成历程都被调用,并不返回STATUS_MORE_PROCESSING_REQUIRED 的时候,Irp才会被完成。 |
|
地下室#
发布于:2003-04-20 19:35
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2003-04-21 09:13
非常感谢ppl的回帖。 劝你仔细看看ddk得文档啊。 |
|
6楼#
发布于:2003-04-22 17:23
用户被禁言,该主题自动屏蔽! |
|
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] |
|
|
8楼#
发布于:2003-04-25 16:27
这个贴子不错,大家看看,呵呵
|
|
|
9楼#
发布于:2003-04-27 13:23
用户被禁言,该主题自动屏蔽! |
|