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

FltDecodeParameters возвращает указатели на адрес списка дескрипторов памяти (MDL), указатель буфера, длину буфера и требуемые параметры доступа для операции ввода-вывода. Это избавляет драйверы минифильтра от использования инструкции switch для поиска позиции этих параметров во вспомогательных подпрограммах, которые обращаются к MDL-адресу, указателю буфера, длине буфера и требуемому доступу для нескольких типов операций.

Синтаксис

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

Параметры

[in] CallbackData

Указатель на структуру данных обратного вызова (FLT_CALLBACK_DATA) для операции ввода-вывода.

[out] MdlAddressPointer

Указатель на переменную, предоставленную вызывающей стороны, которая получает указатель на элемент MdlAddress (или OutputMdlAddress) структуры параметра данных обратного вызова (FLT_PARAMETERS) (обратите внимание, что этот элемент сам является указателем). Этот параметр является необязательным и может иметь значение NULL. Если операция ввода-вывода не имеет поля MDL, этот параметр получает значение NULL.

[out] Buffer

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

[out] Length

Указатель на переменную, предоставляемую вызывающим объектом, которая получает указатель на элемент длины буфера в структуре параметров данных обратного вызова. Если операция не имеет поля длины, этот параметр получает значение NULL.

[out, optional] DesiredAccess

Указатель на переменную, предоставляемую вызывающей стороны, которая получает тип доступа, соответствующий этому типу операций ввода-вывода, например IoReadAccess, IoWriteAccess или IoModifyAccess. IoReadAccess означает, что драйвер минифильтра может проверять содержимое буфера, но не может изменять содержимое на месте. IoWriteAccess и IoModifyAccess, которые эквивалентны, означают, что драйвер минифильтра имеет доступ на чтение и запись к буферу.

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

FltDecodeParameters возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например следующее:

Код возврата Описание
STATUS_INVALID_PARAMETER Структура данных обратного вызова (FLT_CALLBACK_DATA) представляет операцию ввода-вывода без параметров буфера. Это код ошибки.

Комментарии

FltDecodeParameters возвращает указатели на параметры для операции ввода-вывода, а не значения параметров, чтобы вызывающий объект при необходимости смог изменить значения параметров.

FltDecodeParameters можно использовать для быстрых операций ввода-вывода, а также для операций на основе IRP. Он не имеет смысла для операций обратного вызова фильтра файловой системы (FSFilter), так как эти операции не имеют параметров буфера.

Операции IOCTL и FSCTL могут иметь один или два буфера в зависимости от используемого метода буферизации. В случаях, когда операция содержит два буфера (и два поля длины), FltDecodeParameters возвращает поля OutputBuffer, OutputBufferLength и (или ) OutputMdlAddress соответствующим образом.

Не все четыре параметра возвращаются для каждой операции ввода-вывода. Например, для запроса IRP_MJ_READ FltDecodeParameters задает выходные параметры следующим образом.

Параметр Значение
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Буфер &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
Длина &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
IRQL Любой уровень

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

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer