Функция 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 (include Fltkernel.h)
библиотеки FltMgr.lib
IRQL Любой уровень

См. также

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer