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 操作类型的访问类型( 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>>) |
Buffer | & (CallbackData-Iopb-Parameters.Read.ReadBuffer>>) |
时长 | & (CallbackData-Iopb-Parameters.Read.Length>>) |
DesiredAccess | IoWriteAccess |
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | fltkernel.h (包括 Fltkernel.h) |
Library | FltMgr.lib |
IRQL | 任何级别 |