다음을 통해 공유


FsRtlAllocateExtraCreateParameter 함수(ntifs.h)

FsRtlAllocateExtraCreateParameter 루틴은 ECP(추가 만들기 매개 변수) 컨텍스트 구조에 대한 메모리를 할당하고 해당 구조에 대한 포인터를 생성합니다.

통사론

NTSTATUS FsRtlAllocateExtraCreateParameter(
  [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] EcpType

ECP 컨텍스트 구조의 형식을 나타내는 GUID에 대한 포인터입니다. 자세한 내용은 드라이버 GUID 사용 참조하세요.

[in] SizeOfContext

컨텍스트 구조의 크기(바이트)입니다.

[in] Flags

풀 할당 옵션을 정의합니다. 다음은 나열된 플래그 값 중 하나 이상이 비트 OR 연산을 사용하여 Flags 매개 변수와 결합될 때 풀을 할당하는 방법을 설명합니다.

  • FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL - 페이징되지 않은 풀이 할당됩니다. 이 플래그 값을 사용하지 않으면 페이징된 풀이 할당됩니다.

  • FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA - FsRtlAllocateExtraCreateParameter 의해 할당된 모든 풀은 현재 프로세스의 메모리 할당량에 대해 요금이 청구됩니다.

둘 이상의 플래그를 사용하는 경우 사용된 플래그 값과 관련된 모든 효과가 발생합니다.

[in, optional] CleanupCallback

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK형식의 필터 정의 정리 콜백 루틴에 대한 선택적 포인터입니다. 정리 콜백 루틴은 ECP 구조(FsRtlAllocateExtraCreateParameter 루틴에 의해 생성됨)가 삭제될 때 호출됩니다. 정리 콜백 루틴을 적용할 수 없는 경우 이 매개 변수를 NULL 설정합니다.

[in] PoolTag

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

[out] EcpContext

할당된 ECP 컨텍스트 구조에 대한 포인터를 받습니다. 루틴이 충분한 풀을 할당하지 못한 경우 EcpContext 가리키는 값은 NULL FsRtlAllocateExtraCreateParameter STATUS_INSUFFICIENT_RESOURCES 상태 코드를 반환합니다.

반환 값

FltAllocateExtraCreateParameter 다음 중 하나와 같은 상태 코드를 반환합니다.

반환 코드 묘사
STATUS_INSUFFICIENT_RESOURCES FsRtlAllocateExtraCreateParameter ECP 구조체에 충분한 메모리를 할당할 수 없습니다. 이 경우 EcpContext NULL.
STATUS_SUCCESS ECP 구조가 성공적으로 할당되었습니다. 이 경우 할당된 구조체에 대한 포인터가 EcpContext 매개 변수에 반환됩니다.

발언

기본적으로 FsRtlAllocateExtraCreateParameter 루틴은 ECP 컨텍스트 구조에 대해 페이징된 메모리 풀을 할당합니다. Flags 매개 변수에 설명된 대로 FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 비트 마스크를 사용하는 경우 페이징되지 않은 메모리 풀이 할당됩니다. 이 풀이 할당되고 ECP 컨텍스트 구조가 초기화된 후 FltInsertExtraCreateParameter 루틴을 사용하여 ECP 목록 구조(ECP_LIST)에 ECP 컨텍스트 구조(ECP 목록 요소)를 삽입합니다.

호출자가 ECP_LIST 할당하고 하나 이상의 ECP가 IoCreateFileEx호출에 사용되는 경우 이전 설명이 올바릅니다. 이 경우 시스템은 ECP를 해제하지 않으므로 호출자는 동일한 ECP 집합으로 IoCreateFileEx 여러 차례 호출할 수 있습니다. 그러나 파일 시스템 또는 파일 시스템 필터 드라이버가 IRP_MJ_CREATE 요청을 처리하는 동안 기존 또는 새로 만든 ECP_LIST ECP를 연결하는 경우 IRP가 완료되면 이 ECP가 자동으로 정리됩니다. 따라서 필터 드라이버는 동적으로 추가되는 ECP를 정리할 필요가 없습니다. 이렇게 하면 여러 IRP_MJ_CREATE 요청을 생성해야 할 수 있는 프로세스인 재분석 지점에 필터 드라이버의 ECP가 제대로 전파될 수 있습니다.

요구 사항

요구
지원되는 최소 클라이언트 FsRtlAllocateExtraCreateParameter 루틴은 Windows Vista부터 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

참고 항목

ECP_LIST

FltAllocateExtraCreateParameterFromLookasideList

FltAllocateExtraCreateParameterList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK