fltDecodeParameters 函数 (fltkernel.h)

FltDecodeParameters 返回指向内存描述符列表的指针, (MDL) 地址、缓冲区指针、缓冲区长度和 I/O 操作的所需访问参数。 这样,微型筛选器驱动程序就无需使用 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

指向回调数据的指针 (I/O 操作 FLT_CALLBACK_DATA) 结构。

[out] MdlAddressPointer

指向调用方提供的变量的指针,该变量接收指向回调数据参数的 MdlAddress (或 OutputMdlAddress) 成员的指针, (FLT_PARAMETERS) 结构 (请注意,此成员本身是指针) 。 此参数是可选的,可以为 NULL。 如果 I/O 操作没有 MDL 字段,此参数将接收 NULL

[out] Buffer

指向调用方提供的变量的指针,该变量接收指向相应缓冲区成员 (的指针,具体取决于回调数据参数结构中) 的主要函数代码 (请注意,此成员本身是指针) 。

[out] Length

指向调用方提供的变量的指针,该变量接收指向回调数据参数结构中的缓冲区长度成员的指针。 如果该操作没有长度字段,则此参数接收 NULL

[out, optional] DesiredAccess

指向调用方提供的变量的指针,该变量接收适用于此 I/O 操作类型的访问类型( IoReadAccessIoWriteAccessIoModifyAccess 之一)。 IoReadAccess 意味着微筛选器驱动程序可以检查缓冲区的内容,但无法更改内容。 IoWriteAccessIoModifyAccess 是等效的,意味着微筛选器驱动程序具有对缓冲区的读取和写入访问权限。

返回值

FltDecodeParameters 返回STATUS_SUCCESS或相应的 NTSTATUS 值,如下所示:

返回代码 说明
STATUS_INVALID_PARAMETER 回调数据 (FLT_CALLBACK_DATA) 结构表示没有任何缓冲区参数的 I/O 操作。 这是错误代码。

注解

FltDecodeParameters 返回指向 I/O 操作的参数而不是参数值的指针,以便调用方可以根据需要修改参数的值。

FltDecodeParameters 可用于快速 I/O 操作以及基于 IRP 的操作。 对于文件系统筛选器 (FSFilter) 回调操作没有意义,因为这些操作没有缓冲区参数。

IOCTL 和 FSCTL 操作可以有一个或两个缓冲区,具体取决于使用的缓冲方法。 如果操作具有两个缓冲区 (和两个长度字段 ) ,FltDecodeParameters 将根据需要返回 OutputBufferOutputBufferLength 和/或 OutputMdlAddress 字段。

并非每个 I/O 操作都返回这四个参数。 例如,对于IRP_MJ_READ请求, FltDecodeParameters 按如下所示设置输出参数。

参数
MdlAddressPointer & (CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Buffer & (CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
时长 & (CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
IRQL 任何级别

另请参阅

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer