IRP_MJ_PREPARE_MDL_WRITE 联合的 FLT_PARAMETERS
当 FLT_IO_PARAMETER_BLOCK.MajorFunction 为 IRP_MJ_PREPARE_MDL_WRITE 时,使用以下 FLT_PARAMETERS 联合成员。
语法
typedef union _FLT_PARAMETERS {
... ;
struct {
LARGE_INTEGER FileOffset;
ULONG POINTER_ALIGNMENT Length;
ULONG POINTER_ALIGNMENT Key;
PMDL *MdlChain;
} PrepareMdlWrite;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
成员
PrepareMdlWrite:包含以下成员的结构。
FileOffset:缓存文件中的起始字节。
长度:要写入缓存文件的数据的长度(以字节为单位)。
键:与目标文件上的字节范围锁关联的键值。 如果要写入的范围与文件中的排他锁定范围重叠或是排他锁定范围的子范围,则此参数必须是该排他锁定的键。 排他锁必须由调用线程的父进程持有;否则,将忽略此参数。
MdlChain:指向一个变量的指针,该变量接收指向一个或多个内存描述符列表 (MDL) 的指针,用于描述包含要写入的数据的页面。
注解
IRP_MJ_PREPARE_MDL_WRITE 是快速 I/O 操作。 它执行与 IRP_MJ_WRITE + IRP_MN_MDL 相同的操作,但以下差异除外:
- 如果在执行 MDL 工作之前文件还没有缓存,则基于 IRP 的操作会在文件上设置缓存。
- 如果文件尚未缓存,则快速 IO 操作将失败。
IRP_MJ_PREPARE_MDL_WRITE 操作的 FLT_PARAMETERS 结构包含快速 I/O PrepareMdlWrite 操作的参数。 该操作由回调数据 (FLT_CALLBACK_DATA) 结构表示。 它包含在 FLT_IO_PARAMETER_BLOCK 结构中,Iopb 指向 FLT_IO_PARAMETER_BLOCK 结构中的操作参数。
如果快速 I/O IRP_MJ_PREPARE_MDL_WRITE 请求失败,I/O 的发出者将决定如何重新发出请求。 例如,可以使用 IRP_MJ_WRITE + IRP_MN_MDL 作为基于 IRP 的操作重新发出请求。
要求
要求类型 | 要求 |
---|---|
头文件 | Fltkernel.h(包括 Fltkernel.h) |