다음을 통해 공유


_RxAllocatePoolWithTag 함수

_RxAllocatePoolWithTag 메모리 휴지통 인스턴스를 catch하는 데 사용할 수 있는 블록의 시작 부분에 4 바이트 태그가 있는 풀에서 메모리를 할당합니다.

구문

VOID* _RxAllocatePoolWithTag(
   ULONG Type,
   ULONG Size,
   ULONG Tag,
   PSZ   FileName,
   ULONG LineNumber
);

매개 변수

형식
할당할 풀의 형식입니다. 이 매개 변수는 POOL_TYPE 다음 열거형 값 중 하나일 수 있습니다.

NonPagedPool
IRQL에서 액세스할 수 있는 페이지가 없는 시스템 메모리입니다. NonPagedPool 메모리는 부족한 리소스이며 드라이버는 필요한 경우에만 할당해야 합니다. 시스템은 NonPagedPool 의 PAGE_SIZE 보다 큰 버퍼만 PAGE_SIZE 배수로 할당할 수 있습니다. PAGE_SIZE보다 크지만 PAGE_SIZE 다중 버퍼에 대한 요청은 페이지를 초과할 수 없는 메모리를 낭비합니다.

PagedPool
IRQL < DISPATCH_LEVEL 할당하고 액세스할 수 있는 페이징 가능한 시스템 메모리입니다.

크기
할당할 메모리 블록의 크기(바이트)입니다.

Tag
할당된 버퍼를 표시하는 데 사용할 4 바이트 태그입니다. 태그를 사용하는 방법에 대한 설명은 ExAllocatePoolWithTag를 참조하세요. 태그에 있는 각 문자의 ASCII 값은 0에서 127 사이여야 합니다.

FileName
메모리 할당이 발생한 원본 파일 이름에 대한 포인터입니다. 이 매개 변수는 현재 사용되지 않습니다.

LineNumber
메모리 할당이 발생한 원본 파일의 줄 번호입니다. 이 매개 변수는 현재 사용되지 않습니다.

반환 값

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

설명

이 루틴을 직접 사용하는 대신 RxAllocatePoolWithTag 매크로를 호출하는 것이 좋습니다. 소매 빌드에서 이 매크로는 ExAllocatePoolWithTag를 호출하도록 정의됩니다. 확인된 빌드에서 이 매크로는 _RxAllocatePoolWithTag 호출하도록 정의됩니다.

_RxAllocatePoolWithTag 루틴은 우선 순위(요청의 중요도)가 LowPoolPriority로 설정된 ExAllocatePoolWithTagPriority를 호출합니다. 시스템이 리소스가 부족한 경우 LowPoolPriority에 대한 요청을 실패할 수 있습니다. 이 루틴을 사용할 때는 드라이버가 할당 오류로부터 복구할 수 있도록 준비해야 합니다.

시스템에서 PAGE_SIZE 이상의 풀 메모리에서 버퍼를 할당하면 페이지 경계에 버퍼가 정렬됩니다. PAGE_SIZE 보다 작은 메모리 요청은 반드시 페이지 경계에 정렬되지는 않지만 항상 단일 페이지에 맞으며 8 바이트 경계에 맞춰집니다. PAGE_SIZE 배수가 아닌 PAGE_SIZE보다 큰 블록을 요청하는 성공적인 할당은 마지막으로 할당된 페이지에서 사용되지 않은 모든 바이트를 낭비합니다.

시스템은 풀 태그를 할당된 메모리와 연결합니다. WinDbg와 같은 프로그래밍 도구는 할당된 각 버퍼와 연결된 풀 태그를 표시할 수 있습니다. 태그 값은 일반적으로 역순으로 표시됩니다. 예를 들어 호출자가 'Fred'를 태그로 전달하는 경우 메모리가 덤프되거나 디버거에서 메모리 사용량을 추적할 때 'derF'로 표시됩니다.

_RxAllocatePoolWithTag 할당된 메모리는 _RxFreePool 호출하여 해제해야 합니다.

_RxAllocatePoolWithTag 호출자는 IRQL <= DISPATCH_LEVEL 실행해야 합니다. DISPATCH_LEVEL 실행되는 호출자는 Type 매개 변수에 대해 NonPagedPool 값을 지정해야 합니다. IRQL <= APC_LEVEL 실행되는 호출자는 Type 매개 변수에 대한 POOL_TYPE 값을 지정할 수 있습니다.

요구 사항

대상 플랫폼

데스크톱

헤더

Ntrxdef.h(Ntrxdef.h 포함)

Irql

설명 섹션을 참조하십시오.

추가 정보

ExAllocatePoolWithTag

_RxCheckMemoryBlock

_RxFreePool