FltFastIoMdlRead 函数 (fltkernel.h)

FltFastIoMdlRead 例程返回一个内存描述符列表(MDL),该列表直接指向文件缓存中的指定字节范围。

语法

BOOLEAN FLTAPI FltFastIoMdlRead(
        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 设置为例程成功锁定的实际字节数。

返回值

如果作成功,FltFastIoMdlRead 例程返回 true;如果作失败,FALSE

言论

FltFastIoMdlRead 例程绕过了通常的 IRP 机制,并返回调用方可用于直接访问缓存文件数据的内存描述符列表(MDL)的链接列表。 此作不会复制或缓冲数据,因此比普通读取快得多。

例程类似于 CcMdlReadFsRtlMdlReadDevFltFastIoMdlReadCcMdlReadFsRtlMdlReadDev 锁定包含缓存文件数据的页,以防止系统将这些页交换到页面文件。 在调用方调用 FltFastIoMdlReadComplete 例程之前,页面将保持锁定在内存中。

要求

要求 价值
目标平台 普遍
标头 fltkernel.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

CcMdlRead

FltFastIoMdlReadComplete

FsRtlMdlReadDev