fltAllocateExtraCreateParameterList 函数 (fltkernel.h)

FltAllocateExtraCreateParameterList 例程为额外的创建参数分配分页池内存 (ECP) 列表结构,并生成指向该结构的指针。

语法

NTSTATUS FLTAPI FltAllocateExtraCreateParameterList(
  [in]  PFLT_FILTER                  Filter,
  [in]  FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
  [out] PECP_LIST                    *EcpList
);

参数

[in] Filter

微筛选器驱动程序的不透明筛选器指针。 此指针唯一标识微筛选器驱动程序,只要加载微筛选器驱动程序,它就保持不变。

[in] Flags

定义池分配选项。 如果使用按位 OR 操作将 FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 标志与 Flags 参数组合,则例程分配的任何池都将根据当前进程的内存配额收费。

[out] EcpList

接收指向已初始化的 ECP 列表结构的指针。 如果例程未能分配足够的池, 则 *EcpList 将为 NULL ,并且例程将返回状态代码STATUS_INSUFFICIENT_RESOURCES。

返回值

FltAllocateExtraCreateParameterList 可以返回以下值之一:

返回代码 说明
STATUS_INSUFFICIENT_RESOURCES FltAllocateExtraCreateParameterList 无法为 ECP 列表结构分配足够的内存。 在这种情况下, *EcpList 将为 NULL
STATUS_SUCCESS 已成功分配并初始化 ECP 列表结构。 在这种情况下,将在 *EcpList 参数中返回指向已初始化列表结构的指针。

注解

操作系统是否自动释放 FltAllocateExtraCreateParameterList 分配的内存取决于何时调用 FltAllocateExtraCreateParameterList ,如以下情况所示:

  • 调用方可以调用 FltAllocateExtraCreateParameterList 来分配ECP_LIST,并在调用方调用 FltCreateFileEx2 例程之前添加一个或多个 ECP 上下文结构。 在这种情况下,操作系统不会释放任何 ECP 上下文结构。 因此,调用方可以使用相同的 ECP 集对 FltCreateFileEx2 进行多次调用。 调用方完成ECP_LIST后,调用方必须调用 FltFreeExtraCreateParameterList 例程来释放ECP_LIST。

  • 文件系统筛选器驱动程序处理 IRP_MJ_CREATE 请求时,文件系统筛选器驱动程序可以调用 FltInsertExtraCreateParameter 将 ECP 附加到现有ECP_LIST。 如果ECP_LIST不存在,则调用方必须调用 FltAllocateExtraCreateParameterList 来创建ECP_LIST。 在这种情况下,创建操作完成后,I/O 管理器会自动清理ECP_LIST和 ECP 上下文结构。 这允许筛选器驱动程序的 ECP 在重新分析点的处理过程中正确传播。 此过程可能需要生成多个IRP_MJ_CREATE请求。

如果FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA标志与 Flags 参数一起使用,如上所述,则会分配一个普通的可分页池。 否则,将使用内部查看列表分配可分页池。

ECP_LIST 结构

ECP_LIST是操作系统声明的不透明结构。 ECP_LIST包含 ECP) 条目 (额外创建参数的列表。

FltAllocateExtraCreateParameterList 例程必须用于为ECP_LIST结构分配内存。 FltAllocateExtraCreateParameterList 分配的内存不会由操作系统自动释放;它必须通过调用 FltFreeExtraCreateParameterList 例程显式解除分配。 请注意,调用 FltFreeExtraCreateParameterList 时,将自动释放任何剩余的 ECP 列表元素。

PECP_LIST数据类型用于声明指向 ECP_LIST 类型的变量的指针。

语法

struct ECP_LIST {
  ;      // Reserved.
};

ECP_LIST 结构在 Ntifs.h 中声明, (包括 Ntifs.h) 。

要求

要求
最低受支持的客户端 此例程从 Windows Vista 开始可用。
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
IRQL <= APC_LEVEL

另请参阅

FltAllocateExtraCreateParameter

FltAllocateExtraCreateParameterFromLookasideList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx