Поделиться через


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

В выходных данных указатель на связанный список списков дескрипторов памяти (MDLs).

[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 (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

CcMdlRead

FsRtlMdlReadCompleteDev

FsRtlMdlReadEx