FsRtlAllocateExtraCreateParameterList 函数 (ntifs.h)
FsRtlAllocateExtraCreateParameterList 例程为 ECP_LIST 结构分配分页池内存,并生成指向该结构的指针。
语法
NTSTATUS FsRtlAllocateExtraCreateParameterList(
[in] FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
[out] PECP_LIST *EcpList
);
参数
[in] Flags
定义池分配选项。 如果使用按位 OR 操作将FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA标志与 Flags 参数结合使用,则由 FsRtlAllocateExtraCreateParameterList 分配的任何池都将针对当前进程的内存配额收费。
[out] EcpList
接收指向初始化的 ECP 列表结构的指针。 如果 FsRtlAllocateExtraCreateParameterList 分配足够的池,*EcpList 将为 NULL,FsRtlAllocateExtraCreateParameterList 将返回状态代码STATUS_INSUFFICIENT_RESOURCES。
返回值
FsRtlAllocateExtraCreateParameterList 可以返回以下值之一:
返回代码 | 描述 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | FsRtlAllocateExtraCreateParameterList 无法为 ECP 列表结构分配足够的内存。 在这种情况下,*EcpList 将为 NULL。 |
STATUS_SUCCESS | 已成功分配和初始化 ECP_LIST 结构的内存。 在这种情况下,EcpList 参数中返回指向初始化列表结构的指针。 |
言论
操作系统是否自动释放 FsRtlAllocateExtraCreateParameterList 分配的内存取决于何时调用 FsRtlAllocateExtraCreateParameterList,如以下情况所示:
调用方可以调用 FsRtlAllocateExtraCreateParameterList 来分配ECP_LIST,并在调用方调用 ioCreateFileEx 例程之前添加一个或多个 ECP 上下文结构。 在这种情况下,操作系统不会释放任何 ECP 上下文结构。 因此,调用方可以使用同一 ECP 集对 IoCreateFileEx 进行多次调用。 当调用方完成ECP_LIST时,调用方必须调用 FltFreeExtraCreateParameter 例程来释放ECP_LIST。
文件系统或文件系统筛选器驱动程序处理 IRP_MJ_CREATE 请求时,文件系统或文件系统筛选器驱动程序可以调用 FltInsertExtraCreateParameter 将 ECP 附加到现有ECP_LIST。 如果ECP_LIST不存在,则调用方必须调用 FsRtlAllocateExtraCreateParameterList 来创建ECP_LIST。 在这种情况下,创建操作完成后,I/O 管理器会自动清理ECP_LIST和 ECP 上下文结构。 这样,文件系统或筛选器驱动程序的 ECP 就可以在重新分析点的处理过程中正确传播。 此过程可能需要生成多个IRP_MJ_CREATE请求。
如果FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA标志与 标志 参数一起使用,则会分配可分页池。 否则,将使用内部外观列表分配可分页池。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另请参阅
FltAllocateExtraCreateParameter
FltAllocateExtraCreateParameterFromLookasideList