Функция 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), которые вызывающий объект может использовать для прямого доступа к кэшированным данным файла. Эта операция не копирует и не буферитирует данные и поэтому выполняется гораздо быстрее, чем обычное чтение.

Процедура аналогична CcMdlRead и FltFastIoMdlRead. FltFastIoMdlRead, CcMdlRead и FsRtlMdlReadDev блокируют страницы, содержащие кэшированные данные файла, чтобы система не переключала эти страницы на файл подкачки. Страницы остаются заблокированными в памяти, пока вызывающий объект не вызовет подпрограмму FsRtlMdlReadCompleteDev .

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

CcMdlRead

FsRtlMdlReadCompleteDev

FsRtlMdlReadEx