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

할당된 메모리의 풀 태그를 지정합니다. 자세한 내용은 ExAllocatePoolWithTagTag 매개 변수를 참조하세요.

[out] EcpContext

할당된 ECP 컨텍스트 구조에 대한 포인터를 받습니다. 루틴이 충분한 풀을 할당하지 못한 경우 *EcpContextNULL이고 루틴은 코드 STATUS_INSUFFICIENT_RESOURCES 상태 반환합니다.

반환 값

FltAllocateExtraCreateParameter 는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INSUFFICIENT_RESOURCES FltAllocateExtraCreateParameter 가 ECP 구조에 충분한 메모리를 할당할 수 없습니다. 이 경우 EcpContextNULL이 됩니다.
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

추가 정보

ECP_LIST

FltAllocateExtraCreateParameterFromLookasideList

FltAllocateExtraCreateParameterList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK