IRP_MJ_WRITE

每个将数据从系统传输到其设备的设备驱动程序必须在 DispatchWriteDispatchReadWrite 例程中处理写入请求,就像此类设备驱动程序上的任何更高级别的驱动程序一样。

发送时间

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

用户模式应用程序或 Win32 组件(表示目标设备对象的文件对象的句柄)已请求将数据传输到设备。 或许,更高级别的驱动程序已经创建并设置了写入 IRP。

输入参数

IRP 中驱动程序的 i/o 堆栈位置指示要在参数上传输的字节数 。写入长度

某些驱动程序使用 参数. write. 键 将传入写入请求排序为驱动程序在设备队列中确定的顺序,或在 irp 的驱动程序托管的内部队列中进行排序。

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

根据基础设备驱动程序是 DO_BUFFERED_IO 还是通过 DO_DIRECT_IO 设置目标设备对象的 标志 ,将从以下项之一传输数据:

  • AssociatedIrp. SystemBuffer 上 >的缓冲区(如果驱动程序使用缓冲 i/o)

  • 如果基础设备驱动程序使用直接 i/o (DMA 或 PIO) ,则由 Irp > 在 MdlAddress中描述的缓冲区

输出参数

操作

收到写入请求时,较高级别的驱动程序会在 IRP 中为下一个较低版本的驱动程序设置 i/o 堆栈位置,或为一个或多个较低版本的驱动程序创建和设置其他 Irp。 它可以通过调用IoSetCompletionRoutine设置其IoCompletion例程,该例程对于输入 IRP 是可选的,但对于驱动程序创建的 irp 是必需的。 然后,驱动程序将请求传递给下一个带 IoCallDriver的低的驱动程序。

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

要求

标头

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

另请参阅

DispatchReadWrite

DispatchWrite

IoCallDriver

IoCompletion

IoSetCompletionRoutine