FltFastIoPrepareMdlWrite 函数 (fltkernel.h)
FltFastIoPrepareMdlWrite 例程返回一个指向指定范围的缓存文件数据的链接列表,以将数据直接写入缓存。
语法
BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
PFLT_INSTANCE InitiatingInstance,
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
参数
InitiatingInstance
调用方不透明实例指针。 此参数是必需的,不能 NULL。
[in] FileObject
指向文件对象的指针。
[in] FileOffset
指向一个值的指针,该值指定保存数据的缓存中的起始字节偏移量。
[in] Length
要从缓存中读取的数据的长度(以字节为单位)。
[in] LockKey
与要锁定的字节范围关联的值。 如果要锁定的范围与已锁定的另一个范围重叠,而该非独占锁锁定的范围是已非独占锁定的另一个范围的子范围,则此参数中的值必须是该非独占锁的键。 锁必须由调用线程的父进程保留。 否则,此参数不起作用。
[out] MdlChain
在输出中,指向指向缓存数据中的字节范围的内存描述符列表(MDL)的链接列表的指针。
[out] IoStatus
指向输出中 IO_STATUS_BLOCK 结构的指针,该结构包含传输的状态。 如果作成功,IoStatus.Status 设置为STATUS_SUCCESS。 否则,它设置为适当的 NTSTATUS 错误代码。 IoStatus.Information 设置为例程成功锁定的实际字节数。
返回值
如果作成功,FltFastIoPrepareMdlWrite 例程返回 TRUE;如果作失败,FALSE。
言论
FltFastIoPrepareMdlWrite 类似于 FsRtlCopyWrite,但 FltFastIoPrepareMdlWrite 不会将数据复制到缓存。 相反,调用方将覆盖的物理页面锁定在内存中,FltFastIoPrepareMdlWrite 返回指向指定字节范围的一个或多个内存描述符列表(MDL)。 锁定页一直处于锁定状态,直到调用方调用 FltFastIoMdlWriteComplete。
MDL 指向的页面锁定在内存中,但不在系统空间中映射。 调用方可以通过调用 MmGetSystemAddressForMdlSafe来执行此映射。
即使调用 FltFastIoPrepareMdlWrite 失败,也可能分配了一个或多个 MDL。 调用方可以检查 IoStatus.Information 的值,以确定是否已发生这种情况。 如果有,调用方必须调用 FltFastIoMdlWriteComplete 才能释放分配的 MDL。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | fltkernel.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |