KMDF 검증 도구 사용

프레임워크는 실행 중인 KMDF 드라이버를 테스트하는 데 사용할 수 있는 기본 제공 확인 기능을 제공합니다. KMDF 검증 도구라고 하는 이 기능은 드라이버의 상태와 드라이버가 프레임워크 개체 메서드에 전달하는 인수의 유효성을 광범위하게 검사합니다. 프레임워크의 검증 도구를 단독으로 사용하거나 범용 드라이버 검증 도구(Verifier.exe) 도구와 함께 사용할 수 있습니다.

KMDF 검증 도구가 사용하도록 설정된 경우 프레임워크는 잠금 획득 및 계층 구조를 확인하고, 프레임워크에 대한 호출이 올바른 IRQL에서 발생하는지 확인하고, 올바른 I/O 취소 및 큐 사용을 확인하고, 드라이버와 프레임워크가 문서화된 계약을 따르는지 확인합니다. 또한 드라이버 개발자가 충돌, 중단 또는 언로드 실패 없이 드라이버가 제대로 응답하는지 여부를 테스트할 수 있도록 메모리 부족 상태를 시뮬레이션할 수 있습니다.

KMDF 검증 도구를 사용하도록 설정하면 이전에 설명한 일부 이벤트가 완료되기 전에 기본 제한 시간인 60초가 만료되면 프레임워크가 디버거로 중단됩니다. 이 시점에서 문제를 디버그하거나 디버거에 "g"를 입력하여 제한 시간을 다시 시작할 수 있습니다. 검증 도구의 동작 제어에 설명된 DbgWaitForSignalTimeoutInSec 레지스트리 값을 사용하여 기본 제한 시간을 변경할 수 있습니다.

테스트하는 동안 드라이버 검증 도구(Verifier.exe)를 실행하고 사용자 고유의 드라이버 및 wdf01000.sys 확인 목록에 추가하는 것이 좋습니다.

참고

KMDF 검증 도구는 드라이버 검증 도구 설정을 /standard 사용할 때 자동으로 사용하도록 설정됩니다. 드라이버 검증 도구 설정 대신 를 사용하는 /flags 경우 Windows 10 버전 1803 이상의 최신 빌드 /flags 에서는 를 위해 /ruleclasses더 이상 사용되지 /standard 않습니다. WDF의 규칙 클래스는 34입니다. 가 사용되지 않을 때 /standard WDF 검증 도구를 사용하도록 설정하려면 를 사용합니다 /ruleclasses 34.

WDF 검증 도구 제어 애플리케이션(WdfVerifier.exe)을 사용하여 KMDF 검증 도구를 사용하거나 사용하지 않도록 설정할 수도 있습니다.

프레임워크의 기본 제공 확인 사용 및 사용 안 함

다음 절차를 사용하여 KMDF 검증 도구를 수동으로 사용하도록 설정할 수 있습니다.

  1. 드라이버가 이미 로드된 경우 장치 관리자 사용하여 디바이스를 사용하지 않도록 설정합니다. 디바이스를 사용하지 않도록 설정하면 드라이버가 언로드됩니다.

  2. RegEdit을 사용하여 VerifierOn을 Windows 레지스트리에 있는 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 키의 드라이버 Parameters\Wdf 하위 키에 있는 0이 아닌 값으로 설정합니다. 0이 아닌 값은 KMDF 검증 도구가 사용하도록 설정되어 있음을 나타냅니다.

    아직 없는 경우 하위 키에 VerifierOn 을 수동으로 추가해야 할 수 있습니다.

  3. 장치 관리자 사용하여 디바이스를 다시 사용하도록 설정하여 드라이버를 로드합니다.

  4. 드라이버가 WdfDriverCreate를 호출할 때 프레임워크는 레지스트리를 검사하고 VerifierOn 이 0이 아닌 값으로 프레임워크의 검증 도구를 사용하도록 설정합니다.

프레임워크의 검증 도구를 사용하지 않도록 설정하려면 동일한 단계를 수행하지만 VerifierOn 값을 0으로 설정합니다.

프레임워크의 검증 도구가 사용하도록 설정되어 있는지 확인하려면 드라이버가 WdfDriverCreate 를 호출한 후 위치에서 중단점을 설정하고 !wdfdriverinfo 디버거 확장 명령을 사용합니다.

!wdfkd.wdfdriverinfo<드라이버 이름> **** 0x1

디버거 확장 명령에 대한 자세한 내용은 프레임워크 기반 드라이버용 디버거 확장을 참조하세요.

검증 도구의 동작 제어

WDF 검증 도구 제어 애플리케이션을 사용하여 아래 옵션을 제어하는 것이 좋습니다. 그러나 레지스트리에서 다음 값을 직접 수정할 수 있습니다.

관련 값은 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 키의 Parameters\Wdf 하위 키 아래에 있습니다.

VerifyOn (REG_DWORD)
WDFVERIFY 매크로를 사용하도록 설정하려면 이 값을 0이 아닌 값으로 설정합니다.

DbgBreakOnError (REG_DWORD)
이 값을 0이 아닌 값으로 설정하면 드라이버가 WdfVerifierDbgBreakPoint를 호출할 때마다 프레임워크가 디버거(사용 가능한 경우)로 중단됩니다.

DbgWaitForSignalTimeoutInSec (REG_DWORD)
Windows 8 VerifierOnDbgBreakOnError가 0이 아닌 값으로 설정된 경우 드라이버는 DbgWaitForSignalTimeoutInSec을 설정하여 기본 제한 시간을 변경할 수 있습니다.

VerifierAllocateFailCount (REG_DWORD)
이 값이 n 값으로 설정된 경우 프레임워크는 n번째 할당 후 드라이버의 개체에 대한 메모리를 할당하려고 할 때마다 실패합니다.

TrackHandles (REG_MULTI_SZ)
이 값이 프레임워크 개체 핸들의 하나 이상의 형식 이름 목록으로 설정된 경우 프레임워크는 지정된 핸들 형식과 일치하는 모든 개체 핸들에 대한 참조를 추적합니다.

EnhancedVerifierOptions (REG_DWORD)
KMDF만

프레임워크 검증 도구의 선택적 기능을 사용하도록 설정하는 데 사용할 수 있는 비트맵을 포함합니다.

VerifyDownLevel (REG_DWORD)
0이 아닌 값으로 설정하고 드라이버가 현재 버전보다 오래된 프레임워크 버전으로 빌드된 경우 프레임워크의 검증 도구에는 드라이버가 빌드된 후 추가된 테스트가 포함됩니다.

일반적으로 위의 레지스트리 값을 설정하는 경우 더 이상 필요하지 않은 경우 삭제합니다.

이러한 레지스트리 값에 대한 전체 설명은 프레임워크 기반 드라이버 디버깅을 위한 레지스트리 값을 참조하세요.