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

Подпрограмма FsRtlPrepareMdlWriteEx возвращает связанный список списков дескрипторов памяти (MDL), указывающих на указанный диапазон кэшированных данных файлов для записи данных непосредственно в кэш. Если поддержка записи в кэше недоступна, подпрограмма возвращается к операции записи 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

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

[in] FileOffset

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

[in] Length

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

[in] LockKey

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

[out] MdlChain

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

[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 возвращает один или несколько списков дескрипторов памяти (MDL), указывающих на указанный диапазон байтов.

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

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

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

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

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

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe