Функция 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)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

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

CcMdlRead

FltFastIoMdlReadComplete

FsRtlMdlReadDev