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之一、IoWriteAccess或 IoModifyAccess。 IoReadAccess 意味着微型筛选器驱动程序可以检查缓冲区的内容,但无法更改内容。 IoWriteAccess 和 IoModifyAccess(等效),这意味着微型筛选器驱动程序对缓冲区具有读取和写入访问权限。
返回值
FltDecodeParameters 返回STATUS_SUCCESS或相应的 NTSTATUS 值,如下所示:
返回代码 | 描述 |
---|---|
STATUS_INVALID_PARAMETER | 回调数据(FLT_CALLBACK_DATA)结构表示没有任何缓冲区参数的 I/O作。 这是一个错误代码。 |
言论
FltDecodeParameters 返回指向 I/O作的参数的指针,而不是参数值,以便调用方可以根据需要修改参数的值。
FltDecodeParameters 可用于快速 I/O作和基于 IRP 的作。 它对于文件系统筛选器(FSFilter)回调作没有意义,因为这些作没有缓冲区参数。
IOCTL 和 FSCTL作可以有一两个缓冲区,具体取决于使用的缓冲方法。 如果作具有两个缓冲区(和两个长度字段),FltDecodeParameters 将返回 OutputBuffer、OutputBufferLength和/或 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 | 任何级别 |