Поделиться через


Функция 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

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

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe