특수 풀
특수 풀 기능은 메모리가 지정된 풀 태그로 할당되거나 지정된 크기 범위 내에 있을 때 예약된 메모리 풀에서 메모리 할당을 요청하도록 Windows를 구성합니다.
약어 |
Spp |
16진수 값 |
(없음) |
심볼 이름 |
(없음) |
대상 |
시스템 전체 레지스트리 항목 (Windows Vista 이상) 시스템 전체 레지스트리 항목, 커널 플래그 |
풀 태그 선택
특정 풀 태그에 대한 특수 풀을 요청할 때 드라이버 또는 다른 커널 모드 프로그램에서 고유한 풀 태그를 사용하는지 확인합니다.
또한 풀 태그를 만들 때(예: ExAllocatePoolWithTag 사용) 태그 문자를 역순으로 입력하는 것이 좋습니다. 예를 들어 태그가 Fred인 경우 derF (0x64657246)로 입력하는 것이 좋습니다. 풀 태그는 레지스트리에 저장되고 디버거 및 기타 도구에 역방향(하위 엔드리안) 순서로 표시됩니다. 역순으로 입력하면 정방향 순서로 표시됩니다(0x46726564).
드라이버가 모든 특수 풀을 사용하는 것으로 의심되는 경우 코드에서 여러 풀 태그를 사용하는 것이 좋습니다. 그런 다음 드라이버를 여러 번 테스트하여 각 테스트에서 하나의 풀 태그에 특수 풀을 할당할 수 있습니다.
또한 시스템의 페이지 크기보다 큰 16진수 값이 있는 풀 태그를 선택합니다. 커널 모드 코드의 경우 값이 PAGE_SIZE 미만인 풀 태그를 입력하면 Gflags는 크기가 해당 범위 내에 있는 모든 할당에 대해 특수 풀을 요청하고 해당하는 풀 태그가 있는 할당에 대해 특수 풀을 요청합니다. 예를 들어 크기 가 30인 경우 크기가 17바이트에서 32바이트 사이의 모든 할당과 풀 태그가 0x0030 할당에 특수 풀이 사용됩니다.
할당 크기 선택
다음 지침을 사용하여 특수 풀 기능에 대한 할당 크기를 선택합니다.
x86 프로세서가 있는 컴퓨터에서 PAGE_SIZE 0x1000 할당 크기 범위의 길이는 8바이트입니다. 이 범위의 크기를 가진 모든 할당에 대해 특수 풀 기능을 구성하려면 이 범위의 최대값과 8을 더한 숫자를 입력합니다. (이 숫자는 항상 8의 배수입니다.) 다음 표에서는 이러한 값을 보여 줍니다.
크기 범위 | 이 번호 입력 |
---|---|
1~8바이트 |
10(10진수 16) |
9-16바이트 |
18(10진수 24) |
17~24바이트 |
20(10진수 32) |
... |
... |
바이트를 0xFF0 0xFE9 |
FF8(10진수 4088) |
AMD x86-64 프로세서가 있는 컴퓨터에서 PAGE_SIZE 0x1000 할당 크기 범위의 길이는 16바이트입니다. 이 범위의 크기가 있는 모든 할당에 대해 특수 풀 기능을 구성하려면 이 범위의 최대값과 16을 더한 숫자를 입력합니다. (이 숫자는 항상 16의 배수입니다.) 다음 표에서는 이러한 값을 보여 줍니다.
크기 범위 | 이 번호 입력 |
---|---|
1~16바이트 |
20(10진수 32) |
17~32바이트 |
30(10진수 48) |
33~48바이트 |
40(10진수 64) |
... |
... |
바이트를 0xFE0 0xFD1 |
FF0(10진수 4080) |
프로세서가 있는 컴퓨터에서 별표( * ) 또는 0x2A(10진수 42)를 사용하여 시스템의 모든 메모리 할당에 대한 특수 풀 기능을 구성할 수 있습니다.
코멘트
전역 플래그 대화 상자에서 특수 풀 기능을 구성하는 방법에 대한 자세한 내용은 특수 풀 구성을 참조하세요. 명령줄에서 특수 풀 기능을 구성하는 방법에 대한 자세한 내용은 GFlags 명령을 참조하세요. 예제는 예제 14: 특수 풀 구성을 참조하세요.
Gflags의 특수 풀 기능은 메모리가 지정된 풀 태그로 할당되거나 지정된 크기 범위 내에 있을 때 예약된 메모리 풀에서 메모리 할당을 요청하도록 Windows에 지시합니다. 특정 드라이버의 모든 할당에 대해 특수 풀을 요청하려면 드라이버 검증 도구 를 사용합니다. 자세한 내용은 WDK(Windows 드라이버 키트)의 "드라이버 검증 도구" 섹션에 있는 "특수 풀" 항목을 참조하세요.
Gflags 및 드라이버 검증 도구의 특수 풀 기능을 사용하면 할당된 메모리 공간 이상으로 작성하거나 이미 해제된 메모리를 참조하는 등 커널 풀 사용에서 오류의 원인을 검색하고 식별할 수 있습니다.
모든 특수 풀 요청이 처리되는 것은 아닙니다. 특수 풀의 각 할당은 페이지가 지정될 수 없는 실제 메모리의 한 페이지와 가상 주소 공간의 두 페이지를 사용합니다. 특수 풀이 소진되면 특수 풀을 다시 사용할 수 있게 될 때까지 표준 풀에서 메모리가 할당됩니다. 표준 풀에서 특수 풀 요청이 채워지면 요청 함수는 성공 상태 반환합니다. 할당이 특수 풀에서 채워지지 않았음에도 불구하고 성공했기 때문에 오류를 반환하지 않습니다.
시스템의 실제 메모리 양에 따라 특수 풀의 크기가 증가합니다. 이상적으로 1GB 이상이어야 합니다. x86 컴퓨터에서는 가상(물리적 공간 외에) 공간이 사용되므로 특수 풀을 사용할 때 는 /3GB 부팅 옵션을 사용하지 마세요. 페이지 파일 최소/최대 수량을 2~3배 늘리는 것도 좋습니다.
또한 할당 이전의 메모리에 대한 참조("언더런") 또는 할당을 초과하는 메모리에 대한 참조("오버런")를 검색하도록 메모리 할당을 정렬하도록 특수 풀 기능을 구성할 수도 있습니다. 이 기능은 모든 버전의 Windows에서 전역 플래그 대화 상자에서만 사용할 수 있습니다. 자세한 내용은 오버런 및 언더런 검색을 참조하세요.
Windows Vista 이상 버전의 Windows에서는 특수 풀 기능을 다시 부팅해야 하는 레지스트리 설정으로 구성할 수 있지만, 다시 부팅이 필요하지는 않지만 Windows를 다시 부팅하거나 종료할 때까지만 적용되는 커널 플래그 설정으로 변경할 때까지 유효합니다. 이전 버전의 Windows에서는 특수 풀을 레지스트리 설정으로만 사용할 수 있습니다.
Windows Vista 이상 버전의 Windows에서는 전역 플래그 대화 상자를 사용하거나 명령줄에서 특수 풀 기능을 구성할 수 있습니다. 이전 버전의 Windows에서는 이 기능을 전역 플래그 대화 상자에서만 사용할 수 있습니다.