풀 추적

풀 추적은 드라이버가 수행한 메모리 할당을 모니터링합니다. 드라이버가 언로드될 때 드라이버 검증 도구는 드라이버에서 수행한 모든 할당이 해제되었는지 확인합니다.

고정되지 않은 메모리 할당( 메모리 누수라고도 함)은 운영 체제 성능 저하의 일반적인 원인입니다. 이렇게 하면 시스템 풀이 조각화되고 결국 시스템 크래시가 발생할 수 있습니다.

이 옵션이 활성화되면 드라이버가 모든 할당을 해제하지 않고 언로드하는 경우 드라이버 검증 도구는 버그 검사 0xC4(매개 변수 1이 0x62 동일함)을 실행합니다.

드라이버 검증 도구가 매개 변수 1이 0x51, 0x52, 0x53, 0x54 또는 0x59 동일한 이 버그를 검사 경우 드라이버는 할당 외부의 메모리에 기록됩니다. 이 경우 특수 풀 기능을 사용하도록 설정하여 오류의 원인을 찾아야 합니다.

버그 검사 매개 변수 목록은 버그 검사 0xC4(DRIVER_VERIFIER_DETECTED_VIOLATION)을 참조하세요.

Windows Vista부터 풀 추적 옵션을 사용하도록 설정하면 잠긴 페이지를 추적할 수도 있습니다. 이 옵션이 활성 상태이면 드라이버가 I/O 작업 후 잠긴 페이지를 해제하지 못하면 드라이버 검증 도구에서 버그 검사 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS)을 실행합니다.

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

Windows 운영 체제의 Windows 7 이상 버전에서 풀 추적이 활성화되면 드라이버 검증 도구는 유휴 프로세스의 컨텍스트에서 할당량 이 있는 커널 풀 메모리를 할당하려는 시도를 검색할 수 있습니다. 이러한 시도는 일반적으로 드라이버가 DPC 루틴에서 메모리를 할당한다는 것을 의미합니다. DPC 루틴에 대한 스레드 또는 프로세스 컨텍스트는 신뢰할 수 없으므로 해당 프로세스에 할당량을 청구하려고 하는 것이 잘못되었습니다.

모니터링 풀 추적

확인 중인 각 드라이버에 대해 메모리 풀 할당 통계를 별도로 모니터링할 수 있습니다. 이러한 통계는 드라이버 검증 도구 관리자, Verifier.exe 명령줄 또는 로그 파일에 표시할 수 있습니다. 자세한 내용은 개별 카운터 모니터링을 참조하세요.

커널 디버거 확장 !verifier 0x3 사용하여 드라이버가 언로드된 후 미해결 메모리 할당을 찾거나 드라이버가 실행되는 동안 현재 할당을 추적할 수 있습니다. 또한 이 확장은 풀 태그, 풀 크기 및 각 할당에 대한 할당자의 주소를 표시합니다. 디버거 확장에 대한 자세한 내용은 Windows 디버깅을 참조하세요.

DPC 루틴의 풀 할당량 요금

커널 드라이버는 ExAllocatePoolWithQuotaTag 를 호출하여 커널 풀 메모리를 할당하고 현재 프로세스의 풀 할당량에 할당된 바이트 수를 청구할 수 있습니다. 드라이버는 일반적으로 애플리케이션에서 가져온 요청과 직접 관련된 메모리 할당에 할당량을 사용합니다.

DPC(지연 프로시저 호출) 루틴은 모든 프로세스의 컨텍스트에서 실행할 수 있습니다. 따라서 DPC 루틴에서 할당량을 충전하면 임의 프로세스가 청구됩니다. 더 나쁜 것은 DPC 루틴이 유휴 프로세스의 컨텍스트에서 실행되는 경우 이 조건으로 인해 메모리 손상 또는 시스템 크래시가 발생할 수 있습니다.

Windows 7부터 드라이버 검증 도구는 DPC 루틴에서 ExAllocatePoolWithQuotaTag 호출을 검색합니다.

이 옵션 활성화

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

  • 명령줄에서

    명령줄에서 풀 추적 옵션은 비트 3(0x8)으로 표시됩니다. 풀 추적을 활성화하려면 플래그 값 0x8 사용하거나 플래그 값에 0x8 추가합니다. 예:

    verifier /flags 0x8 /driver MyDriver.sys
    

    이 기능은 다음 부팅 후에 활성화됩니다.

    Windows Vista 이상 버전의 Windows에서는 명령에 /volatile 매개 변수를 추가하여 컴퓨터를 다시 부팅하지 않고도 풀 추적을 활성화하고 비활성화할 수 있습니다. 예:

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

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

    풀 추적 기능은 표준 설정에도 포함됩니다. 예:

    verifier /standard /driver MyDriver.sys
    
  • 드라이버 검증 도구 관리자 사용

    1. 드라이버 검증 도구 관리자를 시작합니다. 명령 프롬프트 창에 검증 도구를 입력합니다.
    2. 사용자 지정 설정 만들기(코드 개발자용)를 선택한 다음, 다음을 클릭합니다.
    3. 전체 목록에서 개별 설정 선택을 선택합니다.
    4. (검사) 풀 추적을 선택합니다.

    풀 추적 기능은 표준 설정에도 포함됩니다. 이 기능을 사용하려면 드라이버 검증 도구 관리자에서 표준 설정 만들기를 클릭합니다.