IRP_MJ_WRITE
将数据从系统传输到其设备的每个设备驱动程序都必须处理 DispatchWrite 或 DispatchReadWrite 例程中的写入请求,与在此类设备驱动程序上分层的任何更高级别的驱动程序一样。
发送时
创建请求成功完成后的任何时间。
用户模式应用程序或具有表示目标设备对象的文件对象的句柄的 Win32 组件已请求向设备传输数据。 可能更高级别的驱动程序已创建并设置写入 IRP。
输入参数
驱动程序在 IRP 中的 I/O 堆栈位置指示在 Parameters.Write.Length 上传输的字节数。
某些驱动程序使用 Parameters.Write.Key 中的 值将传入的写入请求排序到设备队列或驱动程序管理的 IRP 内部队列中驱动程序确定的顺序。
某些类型的驱动程序还使用 Parameters.Write.ByteOffset 中的 值,该值指示传输操作的起始偏移量。 例如,请参阅可安装文件系统 ( IFS) 文档中的IRP_MJ_WRITE主题。
根据基础设备驱动程序是使用DO_BUFFERED_IO还是DO_DIRECT_IO设置目标设备对象的 标志 ,数据从以下其中一项传输:
如果驱动程序使用缓冲 I/O,则为 Irp-AssociatedIrp.SystemBuffer> 中的缓冲区
> 如果基础设备驱动程序使用直接 I/O (DMA 或 PIO)
输出参数
无
Operation
收到写入请求后,较高级别的驱动程序会在 IRP 中为下一个较低级别的驱动程序设置 I/O 堆栈位置,或者为一个或多个较低级别的驱动程序创建和设置其他 IRP。 它可以通过调用 IoSetCompletionRoutine 来设置其 IoCompletion 例程,该例程对于输入 IRP 是可选的,但对于驱动程序创建的 IRP 是必需的。 然后,驱动程序使用 IoCallDriver 将请求传递到下一个较低的驱动程序。
收到写入请求后,设备驱动程序会将数据从系统内存传输到其设备。 设备 驱动程序将 I /O 状态块的信息字段设置为完成 IRP 时传输的字节数。
要求
标头 |
Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h) |