특수 풀

메모리 손상은 일반적인 드라이버 문제입니다. 드라이버 오류가 발생하면 오류가 발생하고 얼마 후에 작동 중지될 수 있습니다. 가장 일반적인 오류는 이미 해제된 메모리에 액세스하고 n바이트를 할당한 다음 n+1바이트에 액세스하는 것입니다.

메모리 손상을 검색하기 위해 드라이버 검증 도구는 특수 풀에서 드라이버 메모리를 할당하고 해당 풀에서 잘못된 액세스를 모니터링합니다. 특수 풀은 ExAllocatePoolWithTag 같은 커널 모드 시스템 제공 루틴에서만 지원되며 EngAllocMem 같은 GDI 시스템 제공 루틴에서도 지원됩니다.

특수 풀에는 두 가지 맞춤을 사용할 수 있습니다. Verify End 맞춤은 액세스 오버런을 검색하는 데 더 적합하며 Verify Start 맞춤은 액세스 언더런을 검색하는 데 더 적합합니다. 대부분의 메모리 손상은 언더런이 아닌 오버런으로 인해 발생합니다.

특수 풀 기능이 활성화된 경우 Verify End를 선택하면 드라이버에서 요청한 각 메모리 할당이 별도의 페이지에 배치됩니다. 페이지에 맞게 할당을 허용하는 가장 높은 주소가 반환되어 메모리가 페이지 끝에 정렬되도록 합니다. 페이지의 이전 부분은 특수 패턴으로 기록됩니다. 이전 페이지와 다음 페이지는 액세스할 수 없는 것으로 표시됩니다.

드라이버가 할당이 끝난 후 메모리에 액세스하려고 하면 드라이버 검증 도구에서 바로 이를 감지하고 Bug Check 0xCD를 수행합니다. 드라이버가 메모리에서 버퍼 시작 전에 기록되면 패턴이 변경될 수 있습니다. 버퍼가 해제되면 드라이버 검증 도구에서 변경을 감지하고 Bug Check 0xC1을 수행합니다.

버퍼가 해제된 후 드라이버가 버퍼에서 읽거나 쓰면 드라이버 검증 도구에서 Bug Check 0xCC를 수행합니다.

Verify Start를 선택하면 메모리 버퍼가 페이지 시작 부분에 정렬됩니다. 이 설정을 사용할 경우 언더런이 발생하면 바로 버그 검사가 수행되고 오버런이 발생하면 메모리가 해제될 때 버그 검사가 수행됩니다. 그렇지 않으면 이 옵션은 Verify End 옵션과 동일합니다.

드라이버에서는 오버런 오류가 언더런 오류보다 훨씬 더 일반적이므로 Verify End가 기본 맞춤입니다.

개별 메모리 할당으로 이러한 설정이 재정의될 수 있으며 Priority 매개 변수를 XxxSpecialPoolOverrun 또는 XxxSpecialPoolUnderrun으로 설정한 상태로 ExAllocatePoolWithTagPriority를 호출하여 맞춤을 선택할 수 있습니다. 이 루틴은 특수 풀 기능을 활성화 또는 비활성화할 수 없거나 메모리 할당을 위해 특수 풀을 요청할 수 없으며 다른 경우에는 일반 풀에서 할당됩니다. 이 루틴에서는 맞춤만 제어할 수 있습니다.

Windows 7 이상 버전의 Windows 운영 체제에서 특수 풀 옵션은 다음 커널 API를 사용하여 할당된 메모리를 지원합니다.

풀 태그 또는 할당 크기별 특수 풀

지정한 드라이버에 의한 할당을 위해 특수 풀을 요청하는 드라이버 검증 도구의 특수 풀 기능 외에 다음과 같은 다른 두 가지 방법으로 특수 풀을 사용할 수 있습니다.

  • 풀 태그. 지정한 풀 태그를 사용하는 모든 할당을 위해 특수 풀을 요청합니다.

  • 크기. 지정한 크기 범위 내의 모든 할당을 위해 특수 풀을 요청합니다.

풀 태그 또는 크기 범위에 사용할 특수 풀을 요청하려면 Windows용 디버깅 도구에 포함된 Gflags 도구를 사용합니다. 자세한 내용은 전역 플래그 유틸리티 사용을 참조하세요.

드라이버 검증 도구의 특수 풀 기능과 Gflags의 특수 풀 기능을 동시에 사용할 수 있습니다. 그럴 경우 특수 풀이 제한되고 특수 풀에서 할당하려는 일부 시도가 성공하지 못하며 Windows에서는 일반 메모리 풀에서의 할당으로 해결된, 특수 풀에서의 실패한 할당 시도에 대해 성공 상태를 반환할 수 있습니다.

특수 풀 효율성

일부 특수 풀 요청은 수행되지 않습니다. 특수 풀에서의 각 할당은 한 페이지의 페이지로 나눌 수 없는 실제 메모리와 두 페이지의 가상 주소 공간을 사용합니다. 풀을 모두 사용한 경우 특수 풀을 다시 사용할 수 있을 때까지 표준 방식으로 메모리가 할당됩니다. 표준 풀에서 특수 풀 요청을 채우면 풀 요청에 성공했기 때문에 요청하는 함수에서 오류를 반환하지 않습니다. 따라서 특수 풀 기능이 활성화된 경우 여러 드라이버를 동시에 검증하지 않는 것이 좋습니다.

여러 개의 작은 메모리를 요청하는 단일 드라이버에서 이 풀을 소모할 수도 있습니다. 이런 경우 풀 태그를 드라이버의 메모리 할당에 할당하고 특수 풀을 한 번에 하나의 풀 태그 전용으로 사용하는 것이 좋을 수 있습니다.

특수 풀의 크기는 시스템에 있는 실제 메모리 크기에 따라 증가합니다. 이 크기는 1GB 이상이어야 합니다. x86 컴퓨터에서는 실제 외에 가상 공간이 사용되므로 /3GB 부팅 옵션을 사용하지 마세요. 또한 페이지 파일 최소/최대 수량을 2 또는 3의 비율로 늘리는 것이 좋습니다.

드라이버의 모든 할당이 테스트되도록 하려면 오랫동안 드라이버에 스트레스를 가하는 것이 좋습니다.

특수 풀 모니터링

풀 할당과 관련된 통계를 모니터링할 수 있습니다. 이러한 통계는 드라이버 검증 도구 관리자, Verifier.exe 명령줄 또는 로그 파일에 표시할 수 있습니다. 자세한 내용은 글로벌 카운터 모니터링을 참조하세요.

특정 풀에 풀 할당을 했습니다. 카운터가 풀 할당에 성공했습니다. 카운터와 동일하면 특수 풀이 모든 메모리 할당을 충분히 처리할 수 있는 것입니다. 전자 카운터가 후자보다 낮으면 특수 풀이 한 번 이상 모두 사용된 것입니다.

이러한 카운터는 크기가 한 페이지보다 큰 할당을 추적하지 않는데, 특수 풀이 해당 할당에 적합하지 않기 때문입니다.

특수 풀 기능을 사용하도록 설정했지만 모든 풀 할당의 95% 미만이 특수 풀에서 할당된 경우 드라이버 검증 도구 관리자에 경고가 나타납니다. Windows 2000에서는 이 경고가 드라이버 상태 화면에 나타납니다. Windows XP 이상에서는 글로벌 카운터 화면에 나타납니다. 이런 경우 더 짧은 드라이버 목록을 검증하거나, 풀 태그별로 개별 풀을 검증하거나 더 많은 실제 메모리를 시스템에 추가해야 합니다.

또한 커널 디버거 확장 !verifier를 사용하여 특수 풀 사용을 모니터링할 수 있습니다. 이 확장은 드라이버 검증 도구 관리자의 정보와 유사한 정보를 제공합니다. 디버거 확장에 대한 자세한 내용은 Windows 디버깅을 참조하세요.

이 옵션 활성화

드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대해 특수 풀 기능을 활성화할 수 있습니다. 자세한 내용은 드라이버 검증 도구 옵션 선택을 참조하세요.

참고  풀 태그 또는 할당 크기별로 특수 풀 기능을 활성화하거나 Verify Start(언더런 감지) 및 Verify End(오버런 감지) 맞춤을 설정하려면 글로벌 플래그 유틸리티를 사용하세요. 이러한 맞춤 설정은 모든 특수 풀 할당에 적용됩니다.
  • 명령줄에서

    명령줄에서 특수 풀 옵션은 Bit 0 (0x1)로 표시됩니다. 특수 풀을 활성화하려면 플래그 값 0x1을 사용하거나 플래그 값에 0x1을 추가합니다. 예를 들면 다음과 같습니다.

    
    verifier /flags 0x1 /driver MyDriver.sys
    
    

    다음에 부팅하면 기능이 활성화됩니다.

    또한 Windows 2000 이상 버전의 Windows에서는 명령에 /volatile 매개 변수를 추가하여 컴퓨터를 다시 부팅하지 않고도 특수 풀을 활성화하고 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

    
    verifier /volatile /flags 0x1 /adddriver MyDriver.sys
    
    

    이 설정은 바로 적용되지만 컴퓨터를 종료하거나 다시 부팅하면 손실됩니다. 자세한 내용은 일시적 설정 사용을 참조하세요.

    특수 풀 기능은 표준 설정에도 포함되어 있습니다. 예를 들면 다음과 같습니다.

    
    verifier /standard /driver MyDriver.sys
    
    
  • 드라이버 검증 도구 관리자 사용
    1. 사용자 지정 설정 만들기(코드 개발자용)를 선택하고 다음을 클릭합니다.
    2. 전체 목록에서 개별 설정 선택을 선택합니다.
    3. 특수 풀을 선택합니다.

    특수 풀 기능은 표준 설정에도 포함되어 있습니다. 이 기능을 사용하려면 드라이버 검증 도구 관리자에서 표준 설정 만들기를 클릭하세요.

 

 

표시:
© 2015 Microsoft