阅读:4362回复:3
关于IoCompleteRequest的疑问?
究竟是所有在驱动堆栈里的驱动都对IRP调用一次IoCompleteRequest之后,I/O管理器才执行对应用返回.
还是有一驱动调用IoCompleteRequest完成IRP,I/O管理器就执行对应用返回. |
|
沙发#
发布于:2007-10-15 09:33
请高人指路啊!!!!
|
|
板凳#
发布于:2007-10-16 22:34
引用第0楼ylinux于2007-10-12 13:25发表的 关于IoCompleteRequest的疑问? : 只要某一个驱动调用了 iocompleterequest ,该 irp 就会完成, 这个函数回从底向上,依次看各个堆栈是否安装有回调函数,是的话调用之 ~~ , 如果你的驱动在回调函数中返回了 IRP_NEED_MORE_PROCESS , 你的驱动需要自己再调一次 iocompleterequest ........ 看书 |
|
地板#
发布于:2007-10-17 00:15
通常,最底层的驱动必须要调用IoCompleteRequest来完成一个IRP。当调用IoCompleteRequest后,该IRP的完成函数会依次被调用,除非某一个完成函数返回了STATUS_MORE_PROCESSING_REQUIRED。
这意味着,如果某个中间层次的驱动的完成函数返回了STATUS_MORE_PROCESSING_REQUIRED,而它自身又不是该IRP处理的终点,那么它还应该调用一次IoCompleteRequest,以便更上层的驱动能够继续处理该IRP。 |
|