FltDecodeParameters 函数 (fltkernel.h)

FltDecodeParameters 返回指向内存描述符列表(MDL)地址、缓冲区指针、缓冲区长度和 I/O作所需的访问参数的指针。 这会保存微型筛选器驱动程序,使开关语句查找这些参数在访问 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作的访问类型、IoReadAccess之一、IoWriteAccessIoModifyAccessIoReadAccess 意味着微型筛选器驱动程序可以检查缓冲区的内容,但无法更改内容。 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)
缓冲区 &(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