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