Функция 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 , например одно из следующих значений:
Код возврата | Описание |
---|---|
|
Не удалось выделить 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 |