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) ,调用方可以使用该列表直接访问缓存的文件数据。 此操作不会复制或缓冲数据,因此比正常读取要快得多。
例程类似于 CcMdlRead 和 FsRtlMdlReadDev。 FltFastIoMdlRead、 CcMdlRead 和 FsRtlMdlReadDev 锁定包含缓存文件数据的页面,以防止系统将这些页面交换到页面文件。 在调用方调用 FltFastIoMdlReadComplete 例程之前,页面在内存中保持锁定状态。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | fltkernel.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |