Функция 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 |