IRP详解(2)----传输类型

来源:互联网 发布:linux c sleep 头文件 编辑:程序博客网 时间:2024/05/29 04:43

     看完上篇的IRP请求类型,我们在来看看IRP是如何在上层和底层间实现数据传输的,微软支持以下三种数据传输机制:

1:Buffered I/O传输

      I/O管理器发起Buffered I/O请求时,该IRP将会创建一个内部缓冲区,当该请求是写操作时,I/O管理器将用户空间要写入的缓冲区内容复制到该内部缓冲区中,相反,读操作时,将内部缓冲区的内容复制给用户空间缓冲区。

2:Direct I/O传输

      I/O管理器发起Buffered I/O请求时,该IRP将会包含一个地址,该地址表示的是一个由MDL方式描述的缓冲区。

3:即非Buffered I/O也非Direct I/O传输

      I/O控制代码中指定为METHOD_NEITHER即表示这个传输方式。该IRP包含一个指向用户模式下的缓冲区的指针。

      值得注意的是,UMDF针对这种传输只提供部分支持,而KMDF则没有限制。