IRP_MJ_WRITE联合FLT_PARAMETERS
当操作FLT_IO_PARAMETER_BLOCK结构的 MajorFunction 字段IRP_MJ_WRITE时,将使用以下联合组件。
语法
typedef union _FLT_PARAMETERS {
... ;
struct {
ULONG Length;
ULONG Key;
LARGE_INTEGER ByteOffset;
PVOID WriteBuffer;
PMDL MdlAddress;
} Write;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
成员
写入:包含以下成员的结构。
长度:要写入的数据的长度(以字节为单位)。
键:与目标文件上的字节范围锁关联的键值。
ByteOffset:要写入的数据文件中的起始字节偏移量。
WriteBuffer:指向包含要写入文件的数据的缓冲区的指针。 此成员是可选的,如果 MdlAddress 中提供了 MDL,则该成员可以为 NULL。 请参阅备注。
MdlAddress:描述 WriteBuffer 成员指向的缓冲区的内存描述符列表(MDL)的地址。 此成员是可选的,如果 WriteBuffer 中提供了缓冲区,则可以为 NULL。 请参阅备注。
注解
IRP_MJ_WRITE操作的FLT_PARAMETERS结构包含由回调数据(FLT_CALLBACK_DATA)结构表示的写入操作的参数。 它包含在 FLT_IO_PARAMETER_BLOCK 结构中。
如果同时提供了 WriteBuffer 和 MdlAddress 缓冲区,则建议使用 MDL。 当在调用进程的上下文中访问用户模式地址,或者它是内核模式地址时,WriteBuffer 指向的内存有效。
如果微型筛选器更改 MdlAddress 的值,则在其后操作回调之后,筛选器管理器将释放当前存储在 MdlAddress 中的 MDL 并还原 MdlAddress 的上一个值。
如果在 Iopb-MinorFunction> 中设置了IRP_MN_COMPLETE位,则 MdlAddress 是发送到 CcMdlReadComplete 的地址。
如果在 Iopb-MinorFunction> 中设置了IRP_MN_MDL位(而不是IRP_MN_COMPLETE位),则 MdlAddress 是发送到 CcPrepareMdlWrite 的地址。
IRP_MJ_WRITE可以是基于 IRP 的操作或快速 I/O 操作。
要求
要求类型 | 要求 |
---|---|
头文件 | Fltkernel.h(包括 Fltkernel.h) |