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