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

另请参阅

FltFastIoMdlWriteComplete

FsRtlCopyWrite

mmGetSystemAddressForMdlSafe