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
풀 할당 옵션을 정의합니다. 다음은 나열된 플래그 값 중 하나 이상이 Bit 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_LIST ECP를 연결하는 경우 IRP가 완료되면 이 ECP가 자동으로 정리됩니다. 따라서 필터 드라이버는 동적으로 추가되는 ECP를 클린 필요가 없습니다. 이렇게 하면 필터 드라이버의 ECP가 재분석 지점 간에 제대로 전파될 수 있습니다. 이 프로세스는 여러 IRP_MJ_CREATE 요청을 생성해야 할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
IRQL | <= APC_LEVEL |
추가 정보
FltAllocateExtraCreateParameterFromLookasideList
FltAllocateExtraCreateParameterList