FsRtlAllocateExtraCreateParameterFromLookasideList 函数 (ntifs.h)

FsRtlAllocateExtraCreateParameterFromLookasideList 例程从给定的 lookaside 列表中为额外的创建参数分配内存池, (ECP) 上下文结构,并生成指向该结构的指针。

语法

NTSTATUS FsRtlAllocateExtraCreateParameterFromLookasideList(
  [in]           LPCGUID                                        EcpType,
  [in]           ULONG                                          SizeOfContext,
  [in]           FSRTL_ALLOCATE_ECP_FLAGS                       Flags,
  [in, optional] PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
  [in, out]      PVOID                                          LookasideList,
  [out]          PVOID                                          *EcpContext
);

参数

[in] EcpType

指向 GUID 的指针,该 GUID 指示应为其分配上下文结构的 ECP 类型。 有关 ECP 的详细信息,请参阅 将额外创建参数与IRP_MJ_CREATE操作配合使用

[in] SizeOfContext

ECP 上下文结构的大小(以字节为单位)。

[in] Flags

定义池分配选项。 如果 SizeOfContext 参数的值大于 LookasideList 参数指向的 lookaside 列表 的大小(以字节为单位), 则 FsRtlAllocateExtraCreateParameterFromLookasideList 将从系统池而不是 lookaside 列表分配 ECP 上下文结构。 在这种情况下,如果 Flags 参数包含 FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 位标志值,则 FsRtlAllocateExtraCreateParameterFromLookasideList 分配的系统池将按当前进程的内存配额收费。 有关位标志值的详细信息,请参阅 FsRtlAllocateExtraCreateParameterFlags 参数。 在更典型的情况下,当 FsRtlAllocateExtraCreateParameterFromLookasideList 从 lookaside 列表中为 ECP 上下文结构分配内存时, FsRtlAllocateExtraCreateParameterFromLookasideList 将忽略FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA位标志。

[in, optional] CleanupCallback

指向 PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK类型的微筛选器定义的清理回调例程的可选指针。 删除 ECP 上下文结构时,将调用清理回调例程。 如果清理回调例程不适用,请将此参数设置为 NULL

[in, out] LookasideList

指向已初始化的 lookaside 列表的指针, FsRtlAllocateExtraCreateParameterFromLookasideList 尝试为 ECP 上下文结构) 分配池 (。 若要初始化 lookaside 列表,请使用 FsRtlInitExtraCreateParameterLookasideList 例程。

[out] EcpContext

指向接收指向已分配 ECP 上下文结构的指针的位置的指针的指针。 如果 FsRtlAllocateExtraCreateParameterFromLookasideList 未能为 ECP 上下文结构分配足够的池, FsRtlAllocateExtraCreateParameterFromLookasideList 会将 EcpContext 设置为 NULL ,并返回状态代码STATUS_INSUFFICIENT_RESOURCES。

返回值

FsRtlAllocateExtraCreateParameterFromLookasideList 例程可以返回以下值之一:

返回代码 说明
STATUS_INSUFFICIENT_RESOURCES FsRtlAllocateExtraCreateParameterFromLookasideList 例程无法为 ECP 上下文结构分配足够的内存。 在这种情况下, EcpContext 参数为 NULL
STATUS_SUCCESS 已成功分配 ECP 上下文结构。 在这种情况下, FsRtlAllocateExtraCreateParameterFromLookasideList 返回指向 EcpContext 参数中已分配结构的指针。

注解

使用 FsRtlInitExtraCreateParameterLookasideList 例程初始化分页或非分页池查看列表。 使用 FsRtlAllocateExtraCreateParameterFromLookasideList 例程从 lookaside 列表中分配 ECP 上下文结构,并使用 FsRtlFreeExtraCreateParameter 例程解除分配 ECP 上下文结构。

使用 FsRtlDeleteExtraCreateParameterLookasideList 例程释放 lookaside 列表。

在卸载之前,驱动程序必须释放它们创建的所有 ECP 上下文结构和查看列表。 但是,如果文件系统或文件系统筛选器驱动程序在处理IRP_MJ_CREATE请求时将 ECP 附加到现有或新创建的ECP_LIST,则在 IRP 完成时会自动清理此 ECP。 因此,筛选器驱动程序不必清理动态添加的 ECP。 这允许筛选器驱动程序的 ECP 在重新分析点之间正确传播,此过程可能需要生成多个 IRP_MJ_CREATE 请求。

有关将 lookaside 列表与驱动程序配合使用的详细信息,请参阅使用 Lookaside Lists

要求

要求
最低受支持的客户端 FsRtlAllocateExtraCreateParameterFromLookasideList 从 Windows Vista 开始可用。
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FsRtlDeleteExtraCreateParameterLookasideList

FsRtlFreeExtraCreateParameter

FsRtlInitExtraCreateParameterLookasideList

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK