Функция FltFastIoPrepareMdlWrite (fltkernel.h)
Подпрограмма FltFastIoPrepareMdlWrite возвращает связанный список списков дескрипторов памяти (MDL), которые указывают на указанный диапазон кэшированных данных файла для записи данных непосредственно в кэш.
Синтаксис
BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
PFLT_INSTANCE InitiatingInstance,
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
Параметры
InitiatingInstance
Указатель непрозрачного экземпляра для вызывающего объекта. Этот параметр является обязательным и не может иметь значение NULL.
[in] FileObject
Указатель на объект файла.
[in] FileOffset
Указатель на значение, указывающее начальное смещение байтов в кэше, в котором содержатся данные.
[in] Length
Длина данных, считываемых из кэша, в байтах.
[in] LockKey
Значение , связанное с диапазоном байтов для блокировки. Если диапазон, который необходимо заблокировать, перекрывает другой диапазон, который уже заблокирован неисключительной блокировкой, или если диапазон для чтения является вложенным диапазоном другого диапазона, который уже заблокирован не исключительно, значение в этом параметре должно быть ключом для этой неисключительной блокировки. Блокировка должна быть удержана родительским процессом вызывающего потока. В противном случае этот параметр не оказывает никакого влияния.
[out] MdlChain
В выходных данных — указатель на связанный список списков дескрипторов памяти (MDL), которые указывают на диапазон байтов в кэшированных данных.
[out] IoStatus
Указатель на структуру IO_STATUS_BLOCK , которая в выходных данных содержит состояние передачи. Если операция выполнена успешно, ioStatus.Status имеет значение STATUS_SUCCESS. В противном случае устанавливается соответствующий код ошибки NTSTATUS. IoStatus.Information — это фактическое число байтов, успешно заблокированных подпрограммой.
Возвращаемое значение
Подпрограмма FltFastIoPrepareMdlWrite возвращает значение TRUE , если операция выполнена успешно, и FALSE в случае сбоя операции.
Комментарии
FltFastIoPrepareMdlWrite похож на FsRtlCopyWrite, за исключением того, что FltFastIoPrepareMdlWrite не копирует данные в кэш. Вместо этого физические страницы, которые вызывающий объект перезаписывает, блокируются в памяти, а FltFastIoPrepareMdlWrite возвращает один или несколько списков дескрипторов памяти (MDL), указывающих на указанный диапазон байтов. Заблокированные страницы остаются заблокированными, пока вызывающий объект не вызовет FltFastIoMdlWriteComplete.
Страницы, на которые указывают многомерные списки, блокируются в памяти, но не сопоставляются в системном пространстве. Вызывающий объект может выполнить это сопоставление, вызвав MmGetSystemAddressForMdlSafe.
Даже если вызов FltFastIoPrepareMdlWrite завершается сбоем, возможно, выделен один или несколько mdls. Вызывающий объект может проверить значение IoStatus.Information , чтобы определить, произошло ли это. Если это так, вызывающий объект должен вызвать FltFastIoMdlWriteComplete , чтобы освободить выделенные MDL.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по