Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограмма 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, например одно из следующих:
| Возвращаемый код | Описание |
|---|---|
|
Не удалось выделить 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 |