드라이버 검증 도구: 새로운 기능

드라이버 검증 도구 는 Windows 2000부터 모든 버전의 Windows에서 사용할 수 있습니다. 각 버전은 새로운 기능을 도입하고 Windows 드라이버에서 버그를 찾는지 확인합니다. 이 섹션에서는 변경 내용을 요약하고 관련 설명서에 대한 링크를 제공합니다.

Windows 11 드라이버 검증 도구(업데이트: 2021년 9월 30일)

Windows 11 시작하여 휘발성 구문과 다른 명령 구문을 사용하여 다시 부팅하지 않고 많은 플래그를 사용하도록 설정합니다. 새 구문에 대한 자세한 내용은 드라이버 검증 도구 명령 구 문을 참조하세요.

Windows 10 드라이버 검증 도구(업데이트: 2018년 5월 8일)

중요

Windows 10 버전 1803 이상 릴리스에서 WDF 검증 도구를 사용하도록 설정하는 방법에 대한 자세한 내용은 KMDF 검증 도구 사용을 참조하세요.

  • 여전히 드라이버 검증 도구 /standard 플래그의 일부로 WDF 확인을 사용하도록 설정할 수 있습니다. 자세한 내용은 드라이버 검증 도구 명령 구문을 참조하세요.
  • WDF 확인이 더 이상 자동으로 사용하도록 설정되지 않아 구문 /flags 0x209BB 으로 DV를 사용하도록 설정하는 경우 이 변경 내용이 영향을 줍니다.

Windows 10 드라이버 검증 도구는 다음 기술에 대한 새로운 드라이버 유효성 검사 규칙을 포함합니다.

Windows 8-1의 드라이버 검증 도구(업데이트: 2013년 6월 17일)

드라이버 검증 도구는 Windows 8.1 시작하여 오류를 감지하기 위한 네 가지 새로운 옵션을 도입했습니다.

Windows 8 드라이버 검증 도구(업데이트: 2012년 10월 20일)

드라이버 검증 도구는 Windows 8 시작하여 오류를 검색하기 위한 5가지 새로운 옵션을 도입했습니다.

  • Power Framework 지연 퍼지 옵션은 PoFx(전원 관리 프레임워크)를 사용하는 드라이버에서 동시성 버그를 감지하는 데 도움이 되도록 임의 실행 지연을 삽입합니다. 실행 지연에는 상한이 있습니다. 이 옵션은 PoFx(전원 관리 프레임워크)를 직접 활용하지 않는 드라이버에는 권장되지 않습니다.
  • DDI 규정 준수 검사 옵션은 정적 드라이버 검증 도구에서 드라이버가 함수에 필요한 IRQL에서 함수를 호출하는지 확인하는 데 사용하는 것과 동일한 DDI(디바이스 드라이버 인터페이스) 사용 규칙을 적용합니다. DDI 규정 준수 검사는 표준 드라이버 검증 도구 옵션의 일부로 실행됩니다.
  • 고정 MDL 스택 검사 옵션은 드라이버가 드라이버 스택에서 고정 MDL 버퍼를 처리하는 방법을 모니터링합니다.
  • 고정 MDL 드라이버 검사 옵션은 드라이버가 드라이버별로 고정 MDL 버퍼를 처리하는 방법을 모니터링합니다.
  • 스택 기반 오류 주입 옵션은 커널 모드 드라이버에 리소스 할당 오류를 삽입합니다.

Visual Studio 2012 및 Windows 8용 WDK를 사용하여 드라이버를 빌드, 배포 및 테스트할 때 테스트를 위해 드라이버를 배포할 때 테스트 컴퓨터에서 실행되도록 드라이버 검증 도구를 구성할 수도 있습니다.

Windows 7의 드라이버 검증 도구(업데이트: 2012년 10월 22일)

Windows 7의 경우 드라이버 검증 도구가 일반적인 드라이버 버그의 더 많은 클래스를 노출할 수 있도록 하는 새로운 테스트 및 기능으로 드라이버 검증 도구가 향상되었습니다.

  • 커널 드라이버의 사용자 핸들에 대한 잘못된 참조
  • I/O 확인 개선 사항
  • 특수 풀, 풀 추적 및 낮은 리소스 시뮬레이션 개선 사항
  • 동기화 메커니즘의 잘못된 사용
  • 잘못된 개체 참조
  • DPC 루틴의 풀 할당량 요금
  • 시스템 종료 블록 또는 지연
  • 향상된 강제 보류 중인 I/O 요청

Windows 7에서 드라이버 검증 도구는 대기 중인 스핀 잠금에 대한 검사를 제공하며, 이러한 검사는 이전 Windows 버전의 스핀 잠금에 제공된 것과 유사합니다. 이러한 검사에는 다음이 포함되었습니다.

  • KeAcquireInStackQueuedSpinLock과 같은 IRQL(인터럽트 요청 수준) 값을 발생시켜야 하는 작업이 실제로 IRQL 값을 낮추지 않는지 확인합니다.

  • KeReleaseInStackQueuedSpinLock과 같이 IRQL 값을 낮춰야 하는 작업이 실제로 IRQL 값을 발생시키지 않는지 확인합니다.

  • 드라이버가 관리자 권한 IRQL 에서 실행되는 동안 페이징 가능한 메모리에 대한 가능한 참조를 노출 DISPATCH_LEVEL하기 위해 IRQL 강제 검사 옵션을 사용하는 경우 IRQL 강제 검사 옵션을 사용하는 경우 시스템 프로세스의 작업 집합을 트리밍합니다.

  • 교착 상태 검색 옵션을 사용할 때 가능한 교착 상태 예측

  • 교착 상태 검색 옵션을 사용할 때 스핀 잠금과 스택 대기 스핀 잠금으로 동일한 KSPIN_LOCK 데이터 구조를 사용하려고 합니다.

  • 스핀 잠금 주소로 사용되는 사용자 모드 가상 주소와 같이 분명히 잘못된 포인터 값을 확인합니다.

  • 드라이버 검증 도구 IRQL 로그에서 IRQL 전환을 로깅합니다. 이 정보는 Windows 디버거의 !verifier 8 확장을 사용할 때 나타납니다. !verifier를 참조하세요.

추가 디버깅 정보

Windows 7에서 드라이버 검증 도구는 디버깅에 유용한 다음과 같은 추가 정보를 제공합니다.

확인된 드라이버에서 KeEnterCriticalRegionKeLeaveCriticalRegion 에 대한 최근 호출에 대한 시간순으로 스택 추적이 있는 로그가 있습니다. 로그 콘텐츠는 Windows 디버거의 !verifier 0x200 디버거 확장을 사용하여 표시됩니다. 이 정보는 스레드가 중요한 지역에서 예기치 않게 실행되거나 이미 남아 있는 중요한 지역을 벗어나려는 시나리오를 이해하는 데 유용할 수 있습니다.

!verifier 0x40 디버거 확장을 사용하여 강제 보류 중인 I/O 요청 로그에서 추가 정보를 표시할 수 있습니다. 이전 Windows 버전에서 로그에는 드라이버 검증 도구가 보류해야 하는 각 IRP에 대해 하나의 스택 추적만 포함되었습니다. 강제 보류 중인 IRP에 대해 IoCompleteRequest 가 처음으로 호출된 시점의 스택 추적입니다. Windows 7에는 보류 중인 각 IRP에 대해 두 개 이상의 로그 항목이 있습니다.

  • 드라이버 검증 도구가 강제로 보류되도록 IRP를 선택했을 때의 스택 추적입니다. 드라이버 검증 도구는 확인된 드라이버 중 하나가 IoCallDriver를 호출할 때 강제로 보류될 IRP 중 일부를 선택합니다.
  • 완료가 확인된 드라이버에 도달하기 전에 보류 중인 강제 IRP에 대한 각 IoCompleteRequest 호출에 대한 스택 추적입니다. 드라이버 중 하나가 완료 루틴에서 완료를 일시적으로 중지한 다음 IoCompleteRequest 를 다시 호출하여 다시 시작할 수 있으므로 동일한 IRP에 대해 둘 이상의 IoCompleteRequest 호출이 있을 수 있습니다.

IRQL 전환 로그에 더 유효한 스택 추적이 있습니다. 이 로그는 !verifier 8을 사용하여 표시됩니다. Windows 7 이전 버전의 Windows에서는 드라이버 검증 도구가 상승된 IRQL에서 이러한 스택 추적 중 일부를 기록하려고 시도했지만 높은 IRQL 값으로 인해 스택 추적을 캡처하지 못했습니다. Windows 7에서 드라이버 검증 도구는 다음 스택 추적을 캡처하려고 시도합니다.

  • IRQL을 발생하기 전에(예: 확인된 드라이버가 KeAcquireSpinLock을 호출하는 경우)
  • IRQL이 낮아진 후 확인된 드라이버가 KeReleaseSpinLock을 호출하는 경우

이러한 방식으로 드라이버 검증 도구는 이러한 IRQL 전환 스택 추적을 더 많이 캡처할 수 있습니다.

!analyze 는 향상된 I/O 검증 도구 검사(Windows 7의 I/O 검증 도구에 포함됨)에 의해 노출되는 문제를 심사할 수 있습니다. 이전 Windows 버전에서 향상된 I/O 검증 도구 오류 보고는 드라이버 검증 도구에서 감지한 드라이버 결함에 대한 설명과 디버거에 대한 중단을 표시하는 것으로 구성되었습니다. 이러한 중단 후에 !analyze 를 실행해도 ! analyze 는 디버거에 표시되는 오류 설명 텍스트의 정보를 사용할 수 없으므로 이러한 중단 중 많은 부분에 대해 의미 있는 심사가 발생하지 않습니다. Windows 7에서는 드라이버 검증 도구가 이러한 드라이버 결함에 대한 의미 있는 정보를 메모리에 저장합니다. !analyze 는 이 정보를 찾고 이러한 많은 중단에 대해 훨씬 더 의미 있는 자동 심사를 수행할 수 있습니다.

Windows Vista의 드라이버 검증 도구(업데이트: 2009년 2월 9일)

Windows Vista의 경우 드라이버 검증 도구가 새로운 테스트 및 기능으로 향상되었습니다.

  • 다시 부팅하지 않고 드라이버 검증 도구 사용 및 설정 변경
  • 향상된 낮은 리소스 시뮬레이션
  • 보류 중인 I/O 요청 강제 적용
  • 보안 검사
  • 보다 철저한 I/O 확인
  • 향상된 IRQL 검사
  • 기타 검사
  • 잠긴 메모리 페이지 추적
  • 추가 자동 검사

Windows XP의 드라이버 검증 도구(업데이트: 2001년 12월 4일)

드라이버 검증 도구는 Windows 커널 모드 드라이버 및 그래픽 드라이버를 모니터링하는 도구입니다. Microsoft는 하드웨어 제조업체가 드라이버 검증 도구로 드라이버를 테스트하여 드라이버가 잘못된 기능을 호출하거나 시스템 손상을 일으키지 않도록 하는 것을 강력하게 권장합니다. 드라이버 검증 도구는 Microsoft Windows XP에 대한 새로운 테스트 및 기능으로 향상되었습니다.

테스트를 위해 WHQL에 제출된 드라이버는 드라이버 검증 도구에 통과해야 합니다. Windows XP의 새로운 드라이버 검증 도구 기능은 다음과 같습니다.

  • 드라이버 검증 도구 관리자, verifier.exe 위한 새로운 GUI(그래픽 사용자 인터페이스)
  • 모니터링 스택 전환에 대한 새로운 자동 검사
  • DMA 확인에 대한 새 드라이버 검증 도구 옵션(HAL 확인이라고도 함), 교착 상태 검색 및 SCSI 확인
  • "수준 1" 및 "수준 2" 테스트를 결합하는 I/O 확인 변경, 선택적 고급 I/O 확인 테스트
  • 새 디버거 확장 !deadlock!dma
  • 새 버그 검사: 0xE6(DRIVER_VERIFIER_DMA_VIOLATION) 및 0xF1(SCSI_VERIFIER_DETECTED_VIOLATION)
  • 기존 버그 검사 코드 0xC4 및 0xC9 대한 추가 하위 코드

드라이버 검증 도구 기능은 다음과 같습니다.

  • 새 검증 도구 명령줄 옵션 verifier.exe 유틸리티에는 /adddriver 키워드(keyword) 사용하여 휘발성 설정에 추가할 드라이버 목록을 지정하는 데 사용할 수 있는 새 매개 변수 VolatileDriverList가 있습니다. VolatileDriverList/removedriver 키워드(keyword) 사용하여 제거할 드라이버 목록을 지정할 수 있습니다.

  • 새 !verifier 확장!verifier 확장은 낮은 리소스를 모니터링하거나 IRQL이 잠금을 발생시키고 회전할 때 추가 로그 정보를 표시합니다. 온라인 도움말도 사용할 수 있습니다.

    • 0x4 플래그를 설정하면 낮은 리소스 시뮬레이션 중에 드라이버 검증 도구에서 삽입한 오류 로그가 디스플레이에 포함됩니다.
    • 0x8 플래그를 설정하면 확인 중인 드라이버가 변경한 최신 IRQL의 로그가 표시됩니다.
    • Flags가 정확히 0x4 또는 0x8 경우 Quantity 매개 변수는 디스플레이에 포함할 레코드 또는 로그 항목의 수를 지정합니다.
    • ? 매개 변수에 간단한 도움말 텍스트가 표시됩니다.
  • 드라이버 검증 도구 관리자에 대한 온라인 도움말 드라이버 검증 도구 관리자에 대한 온라인 도움말은 다음 방법 중 하나로 표시될 수 있습니다.

    • 드라이버 검증 도구 관리자 창에서 항목을 길게 누르거나 마우스 오른쪽 단추로 클릭하고 팝업 메뉴에서 What's This? 를 선택합니다.
    • 창의 오른쪽 위 모서리에서 물음표(?)를 선택한 다음 드라이버 검증 도구 관리자 창에서 항목을 선택합니다.