ExAllocatePoolZero 함수(wdm.h)

주의

Microsoft는 Windows 10 버전 1909에서 할당이 0이 되지 않을 수 있는 ExAllocatePoolZero 문제를 알고 있습니다. 이 문제는 2020년 12월 16일에 Windows 10 버전 2004 및 Windows 10 2004용 Enterprise WDK(EWDK) 버전에 대한 WDK의 보안 새로 고침에서 해결되었습니다. 최신 WDK 다운로드에 대한 자세한 내용은 WDK(Windows 드라이버 키트) 다운로드를 참조하세요.

이 루틴은 ExAllocatePoolWithTag에 대한 래퍼 및 권장 대체 옵션입니다.

ExAllocatePoolZero는 지정된 형식의 풀 메모리를 할당하고 할당된 블록에 대한 포인터를 반환합니다. 할당된 메모리를 초기화하지 않으면 ExAllocatePoolWithTag 와 동일합니다.

구문

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

매개 변수

PoolType

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

에 정의된 POOL_RAISE_IF_ALLOCATION_FAILURE 플래그를 사용하여 비트 OR을 수행하여 열거형 값을 수정할 수 있습니다 wdm.h. 이 플래그를 사용하면 요청을 충족할 수 없는 경우 예외가 발생합니다. 비용이 많이 들기 때문에 이 플래그를 사용하지 않는 것이 좋습니다.

마찬가지로 이 값을 커널에 대한 힌트로 POOL_COLD_ALLOCATION 플래그(에 정의wdm.h됨)로 비트 ORing하여 PoolType 값을 수정하여 빠르게 페이징될 가능성이 있는 페이지의 메모리를 할당할 수 있습니다. 상주 풀 메모리의 양을 최대한 줄이려면 이러한 할당을 자주 참조해서는 안 됩니다. POOL_COLD_ALLOCATION 플래그는 권고일 뿐입니다.

NumberOfBytes

할당할 바이트 수입니다.

Tag

할당된 메모리에 사용할 풀 태그입니다. 풀 태그를 작은따옴표(예 Tag1: )로 구분된 1~4자의 0이 아닌 문자 리터럴로 지정합니다. 문자열은 일반적으로 역순으로 지정됩니다(예: 1gaT). 태그의 각 ASCII 문자는 0x7E(타일)에 대한 범위 0x20(공간)의 값이어야 합니다. 각 할당 코드 경로는 디버거와 검증 도구가 코드 경로를 식별하는 데 도움이 되는 고유한 풀 태그를 사용해야 합니다.

반환 값

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

설명

이 루틴은 메모리의 일반 풀 할당에 사용됩니다.

Windows 10 버전 2004 이전 버전의 Windows에서 실행하려면 드라이버가 이 함수를 호출하기 전에 POOL_ZERO_DOWN_LEVEL_SUPPORT 정의하고 ExInitializeDriverRuntime을 호출해야 합니다.

이 함수와 ExAllocatePoolWithTag 의 유일한 차이점은 메모리가 0으로 초기화된다는 것입니다. 원하지 않는 경우 ExAllocatePoolWithTag에 대한 래퍼인 ExAllocatePoolUninitialized 를 대신 사용합니다.

드라이버는 할당하는 바이트 범위 내의 메모리에만 액세스해야 합니다. 이 범위를 벗어난 메모리에 액세스하면 풀이 손상되어 시스템이 충돌할 수 있습니다.

추가 지침은 ExAllocatePoolWithTag 의 설명 섹션을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 버전 2004에는 WDK가 필요합니다. Windows 운영 체제의 Windows 7 이상 버전을 대상으로 합니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL(설명 섹션 참조)
DDI 규정 준수 규칙 CheckDeviceObjectFlags, HwStorPortProhibitedDDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo

추가 정보

ExAllocatePoolUninitialized