IRP详解(3)----UMDF下处理流程

来源:互联网 发布:centos修改ssh端口号 编辑:程序博客网 时间:2024/05/21 12:50

      WDM和MDF下IRP的处理流程是不相同的,其中MDF又有UMDF何KMDF之分,我们先来看看UMDF中IRP的详细处理,如下图所示:

1:I/O管理器将IRP传递给位于内核模式设备堆栈中的顶层驱动对象(Up Device Object)。

2:位于内核的反射器将该IRP打包发送给UMDF Host进程。

3:IRP包传送给负责处理它的驱动后,framework创建一个WDF请求对象并把它插入进相应的队列,亦或者调用相应的回调函数来处理该IRP。

4:当UMDF驱动处理完IRP请求后,framework调用转发器(dispatcher), 转发器将发起一个Windows I/O请求给底层驱动对象(Down Device Object)。

    注意:此时的IRP已经不是最开始发起的IRP

5:底层驱动对象收到新IRP之后将其发送到更下一层的内核模式驱动(Kernel-mode Drivers),内核模式下的驱动将其发送至相应的驱动处理。

6:当IRP完成时,转发器将会收到完成信息,并告诉framework, framework将WDF请求设置成完成状态。

7:framework调用I/O completion回调函数。

8:当最后UMDF的I/O completion回调函数返回后,framework会将完成标识符和数据传递给反射器。

9:反射器将原始的IRP设置成完成,并告之I/O管理器,最后由I/O管理器来通知上层程序本次IRP操作已经完成。