Функция FsRtlPrepareMdlWriteEx (ntifs.h)

Подпрограмма FsRtlPrepareMdlWriteEx возвращает связанный список списков дескрипторов памяти (MDLs), указывающий на указанный диапазон кэшированных данных для записи данных непосредственно в кэш. Если поддержка кэша для записи недоступна, подпрограмма возвращается к операции записи MDL на основе IRP.

Синтаксис

NTSTATUS FsRtlPrepareMdlWriteEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Параметры

[in] FileObject

Указатель на объект файла.

[in] FileOffset

Указатель на значение, указывающее начальное смещение байтов в кэше, в котором хранятся данные.

[in] Length

Длина в байтах данных для записи в кэш.

[in] LockKey

Значение, связанное с диапазоном байтов для блокировки. Если диапазон для блокировки перекрывает другой диапазон, который уже заблокирован с неисключительной блокировкой, или если диапазон для чтения является подрангом другого диапазона, который уже заблокирован неисключительно, значение в этом параметре должно быть ключом для этой неисключительной блокировки. Блокировка должна храниться родительским процессом вызывающего потока. В противном случае этот параметр не действует.

[out] MdlChain

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

[out] IoStatus

Указатель на структуру IO_STATUS_BLOCK, которая содержит состояние передачи. Если операция выполнена успешно, для IoStatus.Status задано значение STATUS_SUCCESS. В противном случае для него задан соответствующий код ошибки NTSTATUS. IoStatus.Information задано фактическое количество байтов, которые подпрограмма успешно заблокирована.

Возвращаемое значение

FsRtlPrepareMdlWriteEx возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например одно из следующих:

Возвращаемый код Описание
STATUS_INSUFFICIENT_RESOURCES
Не удалось выделить IRP для записи на основе IRP.

Замечания

Если для файловой системы доступен быстрый ввод-вывод, подпрограмма FsRtlPrepareMdlWriteEx обходит обычный механизм записи IRP и возвращает связанный список списков дескрипторов памяти (MDL), который вызывающий объект может использовать для записи данных непосредственно в кэш файлов. Вместо копирования буферированных данных в кэш физические страницы, на которые вызывающий объект перезаписывается, блокируются в памяти и могут быть записаны напрямую. FsRtlPrepareMdlWriteEx возвращает один или несколько списков дескрипторов памяти (MDLs), указывающих на указанный диапазон байтов.

Если быстрый ввод-вывод не включен, FsRtlPrepareMdlWriteEx создаст синхронную подготовку ИПП на основе MDL и возвратит многомерные ключи, выделенные из запроса.

Страницы, которые указывают на многомерные выражения, блокируются в памяти, но не сопоставляются в системном пространстве. Вызывающий объект может выполнить это сопоставление, вызвав MmGetSystemAddressForMdlSafe.

За каждым вызовом FsRtlPrepareMdlWriteEx должен следовать вызов CcMdlWriteComplete.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

См. также

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe