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