Windows驱动开发-IRP的完成例程

Posted a-s-m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows驱动开发-IRP的完成例程相关的知识,希望对你有一定的参考价值。

《Windows驱动开发技术详解 》331页,

在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理,

不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数IoCallDriver

当IoCallDriver将IRP的控制权交给被调用驱动时,有两种情况:

1,主动调用的设备是同步完成这个IRP的,从IoCallDriver返回的时刻,代表此IRP已经完成;

2,主动调用的设备是异步操作,IoCallDriver会立刻返回,但此时并没有真正完成IRP;

在第二种情况下,调用IoCallDriver前,先对IRP注册一个完成例程,当底层驱动或其他驱动完成此IRP时,此完成例程立刻被调用,注册IRP完成例程是在当前的堆栈(IO_STACK_LOCATION)中的CompletionRoutine属性,IRP完成后,一层层堆栈向上弹出,如果遇到IO_STACK_LOCATION中的CompletionRoutine属性非空,则调用这个例程,传进这个完成例程的是IO_STACK_LOCATION的Context属性

以上是关于Windows驱动开发-IRP的完成例程的主要内容,如果未能解决你的问题,请参考以下文章

Windows驱动开发-手动创建IRP

YJX_Driver_016_为DDK_HelloWorld添加默认派遣例程

驱动开发函数详解之Wdm

windows内核安全编程 怎么样

Windows内核NT驱动框架基础分析

[转载]windows过滤驱动程序设计入门(驱动程序基本结构,设备栈,IRP栈和工作原理)