FsRtlMdlReadDev 函数 (ntifs.h)

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

语法

BOOLEAN FsRtlMdlReadDev(
  [in]             PFILE_OBJECT     FileObject,
  [in]             PLARGE_INTEGER   FileOffset,
  [in]             ULONG            Length,
  [in]             ULONG            LockKey,
  [out]            PMDL             *MdlChain,
  [out]            PIO_STATUS_BLOCK IoStatus,
  [ in, optional ] PDEVICE_OBJECT   DeviceObject
);

参数

[in] FileObject

指向缓存文件的文件对象的指针。

[in] FileOffset

指向变量的指针,该变量指定保存数据的缓存文件中的起始字节偏移量。

[in] Length

要从缓存中读取的数据的长度(以字节为单位)。

[in] LockKey

一个值,该值与要锁定的字节范围相关联。 如果要锁定的范围与已用非独占锁锁定的另一个区域重叠,或者要读取的范围是已非独占锁定的另一个范围的子范围,则此参数中的值必须是该非独占锁的键。该锁必须由调用线程的父进程持有。 否则,此参数不起作用。

[out] MdlChain

输出时,指向内存描述符链接列表的指针 (MDL) 。

[out] IoStatus

指向 IO_STATUS_BLOCK 结构的指针,该结构在输出中包含传输状态。 如果操作成功, IoStatus.Status 设置为 STATUS_SUCCESS。 否则,它会设置为相应的 NTSTATUS 错误代码。 IoStatus.Information 设置为例程成功锁定的实际字节数。

[ in, optional ] DeviceObject

指向打开文件的设备对象的指针。

返回值

如果操作成功, FsRtlMdlReadDev 例程返回 TRUE ;如果操作失败,则 返回 FALSE

注解

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

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

要求

要求
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

CcMdlRead

FsRtlMdlReadCompleteDev

FsRtlMdlReadEx