다음을 통해 공유


ExAllocatePoolWithTagPriority 함수(wdm.h)

ExAllocatePoolWithTagPriority 루틴은 지정된 형식의 풀 메모리를 할당합니다.

경고

ExAllocatePoolWithTagPriority는 Windows 10 버전 2004에서 더 이상 사용되지 않으며 ExAllocatePool3으로 대체되었습니다. 자세한 내용은 ExAllocatePool2 및 ExAllocatePool3에 더 이상 사용되지 않는 ExAllocatePool 호출 업데이트를 참조하세요.

구문

PVOID ExAllocatePoolWithTagPriority(
  [in] __drv_strictTypeMatch(__drv_typeCond)POOL_TYPE        PoolType,
  [in] SIZE_T                                                NumberOfBytes,
  [in] ULONG                                                 Tag,
  [in] __drv_strictTypeMatch(__drv_typeExpr)EX_POOL_PRIORITY Priority
);

매개 변수

[in] PoolType

할당할 풀 메모리의 유형입니다. 사용 가능한 풀 메모리 유형에 대한 설명은 POOL_TYPE 참조하세요.

이 값을 POOL_RAISE_IF_ALLOCATION_FAILURE 플래그로 비트 ORing하여 PoolType 값을 수정할 수 있습니다. 이 플래그를 사용하면 요청을 충족할 수 없는 경우 예외가 발생합니다.

마찬가지로 이 값을 커널에 대한 힌트로 POOL_COLD_ALLOCATION 플래그로 비트 ORing하여 PoolType 값을 수정하여 빠르게 페이징될 가능성이 있는 페이지의 메모리를 할당할 수 있습니다. 상주 풀 메모리의 양을 최대한 줄이려면 이러한 할당을 자주 참조해서는 안 됩니다. POOL_COLD_ALLOCATION 플래그는 권고에 불과하며 Windows XP부터 사용할 수 있습니다.

[in] NumberOfBytes

할당할 바이트 수입니다.

[in] Tag

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

[in] Priority

이 요청의 우선 순위입니다. 이 매개 변수를 다음 EX_POOL_PRIORITY 열거형 값 중 하나로 설정합니다.

우선 순위 값 Description
LowPoolPriority 리소스가 부족할 때 시스템이 요청에 실패할 수 있도록 지정합니다. 할당 실패에서 복구할 수 있는 드라이버 할당은 이 우선 순위를 사용합니다.
NormalPoolPriority 시스템이 리소스가 매우 낮게 실행되면 요청이 실패할 수 있음을 지정합니다. 대부분의 드라이버는 이 값을 사용해야 합니다.
HighPoolPriority 리소스가 완전히 부족하지 않는 한 시스템에서 요청에 실패하지 않도록 지정합니다. 드라이버는 요청이 성공하는 것이 매우 중요한 경우에만 이 값을 사용합니다.

EX_POOL_PRIORITY 열거형은 XxxSpecialPoolOverrunXxxSpecialPoolUnderrun 변형을 정의하여 드라이버 검증 도구(또는 특수 풀)를 사용하도록 설정할 때 메모리를 할당하는 방법을 지정합니다. 드라이버가 XxxSpecialPoolUnderrun을 지정하는 경우 메모리 관리자특수 풀에서 메모리를 할당할 때 실제 페이지의 시작 부분에 할당합니다. 드라이버가 XxxSpecialPoolOverrun을 지정하는 경우 메모리 관리자는 실제 페이지 끝에 할당합니다.

반환 값

ExAllocatePoolWithTagPriority 는 POOL_RAISE_IF_ALLOCATION_FAILURE 지정하지 않는 한, 사용 가능한 풀에 메모리가 부족하여 요청을 충족할 수 없는 경우 NULL 을 반환합니다. 그렇지 않으면 루틴은 할당된 메모리에 대한 포인터를 반환합니다.

설명

ExAllocatePoolWithTagPriority의 호출자는 IRQL <= DISPATCH_LEVEL 실행해야 합니다. DISPATCH_LEVEL 실행되는 호출자는 PoolType대해 NonPagedXxx 값을 지정해야 합니다. IRQL <= APC_LEVEL 실행되는 호출자는 모든 POOL_TYPE 값을 지정할 수 있지만 IRQL 및 환경도 페이지 형식을 결정하는 데 고려해야 합니다.

NumberOfBytes가 PAGE_SIZE 이상인 경우 페이지 맞춤 버퍼가 할당됩니다. PAGE_SIZE 이하의 메모리 할당은 페이지 내에 할당되며 페이지 경계를 넘지 않습니다. PAGE_SIZE 미만의 메모리 할당은 반드시 페이지 정렬은 아니지만 32비트 시스템의 8 바이트 경계와 64비트 시스템의 16 바이트 경계에 맞춰집니다.

NumberOfBytes = 0을 설정하지 마세요. 풀 헤더 공간을 낭비하고 대부분의 경우 호출 코드에서 잠재적인 유효성 검사 문제를 나타내므로 길이가 0인 할당을 방지합니다. 이러한 이유로 드라이버 검증 도구 는 이러한 할당에 가능한 오류로 플래그를 지정합니다.

풀의 양(페이징 또는 페이징되지 않음)이 높거나 낮을 때 시스템은 특정 표준 이벤트 개체를 자동으로 설정합니다. 드라이버는 이러한 이벤트가 풀 사용량을 조정할 때까지 기다릴 수 있습니다. 자세한 내용은 표준 이벤트 개체를 참조하세요.

NUMA(비균등 메모리 액세스) 다중 프로세서 아키텍처에서 ExAllocatePoolWithTagPriority는 ExAllocatePoolWithTagPriority 를 호출하는 프로세서에 로컬인 메모리를 할당하려고 시도 합니다. 사용할 수 있는 로컬 메모리가 없는 경우 ExAllocatePoolWithTagPriority 는 사용 가능한 가장 가까운 메모리를 할당합니다.

ExAllocatePoolWithTagPriority가 할당하는 메모리는 초기화되지 않습니다. 커널 모드 드라이버는 사용자 모드 소프트웨어에 표시하려면 먼저 이 메모리를 0으로 설정해야 합니다(잠재적으로 권한 있는 콘텐츠가 누출되지 않도록 방지).

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL(설명 섹션 참조)
DDI 규정 준수 규칙 HwStorPortProhibitedDIs(storport), IrqlExAllocatePool(wdm), IrqlExFree2(wdm), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf), UnsafeAllocatePool(wdm)

추가 정보

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE