FltAllocateExtraCreateParameter 函数 (fltkernel.h)
FltAllocateExtraCreateParameter 例程为用户定义的额外创建参数(ECP)上下文结构分配分页内存池,并生成指向该结构的指针。
语法
NTSTATUS FLTAPI FltAllocateExtraCreateParameter(
[in] PFLT_FILTER Filter,
[in] LPCGUID EcpType,
[in] ULONG SizeOfContext,
[in] FSRTL_ALLOCATE_ECP_FLAGS Flags,
[in, optional] PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
[in] ULONG PoolTag,
[out] PVOID *EcpContext
);
参数
[in] Filter
微型筛选器驱动程序的不透明筛选器指针。 此指针唯一标识微型筛选器驱动程序,只要加载微型筛选器驱动程序,该驱动程序就保持不变。
[in] EcpType
指向指示 ECP 上下文结构的类型的用户定义的 GUID 的指针。 有关详细信息,请参阅 在驱动程序中使用 GUID。
[in] SizeOfContext
用户定义的上下文结构的大小(以字节为单位)。
[in] Flags
定义池分配选项。 下面介绍了在使用按位 OR作将一个或多个列出的标志值与 Flags 参数结合使用时如何分配池:
FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL - 将分配非分页池。 如果未使用此标志值,则会分配分页池。
FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA - 此例程分配的所有池将按当前进程的内存配额收费。
如果使用多个标志,将发生与已利用的标志值关联的所有效果。
[in, optional] CleanupCallback
可选指针,指向 PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK类型的微筛选器定义的清理回调例程。 删除 ecP 结构(由 FltAllocateExtraCreateParameter 例程创建)时,将调用清理回调例程。 如果清理回调例程不适用,请将此参数设置为 NULL。
[in] PoolTag
指定已分配内存的池标记。 有关详细信息,请参阅 ExAllocatePoolWithTag的 Tag 参数。
[out] EcpContext
接收指向分配的 ECP 上下文结构的指针。 如果例程未能分配足够的池,*EcpContext 将 NULL,例程将返回状态代码STATUS_INSUFFICIENT_RESOURCES。
返回值
FltAllocateExtraCreateParameter 可以返回以下值之一:
返回代码 | 描述 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | FltAllocateExtraCreateParameter 无法为 ECP 结构分配足够的内存。 在这种情况下,EcpContext 将 NULL。 |
STATUS_SUCCESS | 已成功分配 ECP 结构。 在这种情况下,EcpContext 参数中返回指向已分配结构的指针。 |
言论
默认情况下,FltAllocateExtraCreateParameter 例程为用户定义的 ECP 上下文结构分配分页内存池。 如前所述使用FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL位掩码,则会分配非分页内存池。 分配此池并初始化 ECP 上下文结构后,FltInsertExtraCreateParameter 例程用于将 ECP 上下文结构(ECP 列表元素)插入 ECP 列表结构(ECP 列表)。
作系统不会自动释放由 FltAllocateExtraCreateParameter 例程分配的内存池。 最终必须使用以下方法之一释放此内存池:
调用 FltRemoveExtraCreateParameter 例程以从 ECP 列表中删除 ECP 上下文结构,然后调用 FltFreeExtraCreateParameter 例程释放 ECP 上下文结构本身。 ECP 列表仍然存在。
调用 FltFreeExtraCreateParameterList 例程 - 这将释放 ECP 列表,包括任何列表元素(ECP 上下文结构)。 ECP 列表已销毁。
但是,如果文件系统或文件系统筛选器驱动程序在处理IRP_MJ_CREATE请求时将 ECP 附加到现有或新创建的ECP_LIST,则在 IRP 完成时会自动清理此 ECP。 因此,筛选器驱动程序不必清理动态添加的 ECP。 这允许筛选器驱动程序的 ECP 在重新分析点之间正确传播,该过程可能需要生成多个IRP_MJ_CREATE请求。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | fltkernel.h (包括 Fltkernel.h) |
库 | FltMgr.lib |
IRQL | <= APC_LEVEL |
另请参阅
FltAllocateExtraCreateParameterFromLookasideList
FltAllocateExtraCreateParameterList