IRP_MJ_READ

将数据从其设备传输到系统的每个设备驱动程序都必须处理 DispatchReadDispatchReadWrite 例程中的读取请求,与在此类设备驱动程序上分层的任何更高级别的驱动程序一样。

发送时间

创建请求成功完成后的任何时间。

用户模式应用程序或 Win32 组件具有表示目标设备对象的文件对象的句柄,可能已请求从设备传输数据。 可能,更高级别的驱动程序已创建并设置读取 IRP。

输入参数

驱动程序在 IRP 中的 I/O 堆栈位置指示在 Parameters.Read.Length 处传输的字节数。

某些驱动程序使用 Parameters.Read.Key 中的值将传入读取请求排序为设备队列或驱动程序管理的 IRP 内部队列中由驱动程序确定的顺序。

某些类型的驱动程序还使用 Parameters.Read.ByteOffset 中的值,该值指示传输操作的起始偏移量。 有关示例,请参阅可安装文件系统 ( IFS) 文档中的 IRP_MJ_READ 主题。

输出参数

根据基础设备驱动程序是使用DO_BUFFERED_IO还是DO_DIRECT_IO设置目标设备对象的 标志 ,数据将传输到以下其中一个:

  • 如果驱动程序使用缓冲 I/O,则为 Irp-AssociatedIrp.SystemBuffer> 处 的缓冲区。

  • 如果基础设备驱动程序使用直接 I/O (DMA 或 PIO) ,则为 Irp-MdlAddress> 处的 MDL 描述的缓冲区。

Operation

收到读取请求后,较高级别的驱动程序会在 IRP 中为下一个较低级别的驱动程序设置 I/O 堆栈位置,或者为一个或多个较低级别的驱动程序创建并设置其他 IRP。 它可以通过调用 IoSetCompletionRoutine 来设置其 IoCompletion 例程,该例程对于输入 IRP 是可选的,但对于驱动程序创建的 IRP 是必需的。 然后,驱动程序使用 IoCallDriver 将请求传递给下一个较低的驱动程序。

收到读取请求后,设备驱动程序会将数据从其设备传输到系统内存。 设备驱动程序将 I/O 状态块的 “信息 ”字段设置为完成 IRP 时传输的字节数。

要求

标头

Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另请参阅

DispatchRead

DispatchReadWrite

IoCallDriver

IoSetCompletionRoutine