Функция FltFastIoPrepareMdlWrite (fltkernel.h)

Подпрограмма FltFastIoPrepareMdlWrite возвращает связанный список списков дескрипторов памяти (MDLs), указывающий на указанный диапазон кэшированных данных для записи данных непосредственно в кэш.

Синтаксис

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

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

[out] IoStatus

Указатель на структуру IO_STATUS_BLOCK, которая содержит состояние передачи. Если операция выполнена успешно, IoStatus.Status имеет значение STATUS_SUCCESS. В противном случае для него задан соответствующий код ошибки NTSTATUS. IoStatus.Information задано фактическое количество байтов, которые подпрограмма успешно заблокирована.

Возвращаемое значение

Подпрограмма FltFastIoPrepareMdlWrite возвращает TRUE, если операция завершается успешно и FALSE, если операция завершается ошибкой.

Замечания

FltFastIoPrepareMdlWrite аналогично FsRtlCopyWrite, за исключением того, что FltFastIoPrepareMdlWrite не копирует данные в кэш. Вместо этого физические страницы, которые вызывающий объект перезаписывает, блокируются в памяти, и FltFastIoPrepareMdlWrite возвращает один или несколько списков дескрипторов памяти (MDLs), указывающих на указанный диапазон байтов. Заблокированные страницы остаются заблокированными, пока вызывающий объект не вызывает FltFastIoMdlWriteComplete.

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

Даже если вызов FltFastIoPrepareMdlWrite завершается ошибкой, может быть выделено одно или несколько многомерных выражений. Вызывающий объект может проверить значение IoStatus.Information, чтобы определить, произошло ли это. Если он имеется, вызывающий объект должен вызвать FltFastIoMdlWriteComplete, чтобы освободить выделенные многомерные выражения.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка fltkernel.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe