다음을 통해 공유


UMDF 검증 도구 사용

프레임워크는 실행 중인 UMDF(User-Mode Driver Framework) 드라이버를 테스트하는 데 사용할 수 있는 기본 제공 확인 기능을 제공합니다. UMDF 검증 도구라고도 하는 이 기능은 드라이버의 상태와 드라이버가 프레임워크 개체 메서드에 전달하는 인수의 유효성을 광범위하게 검사합니다. UMDF 검증 도구 자체 또는 범용 애플리케이션 검증 도구(AppVerif.exe) 도구를 함께 사용할 수 있습니다.

UMDF 검증 도구는 잠금 획득 및 계층 구조를 확인하고, 올바른 I/O 취소 및 큐 사용을 확인하고, 드라이버와 프레임워크가 문서화된 계약을 따르는지 확인합니다.

UMDF 검증 도구는 UMDF 드라이버 코드의 오류로 인해 버그 검사를 발생시키고, 호스트 프로세스에 버그 검사를 유발합니다. 그러나 UMDF 버그 검사를 수행해도 오류에 대한 정보가 포함된 파란색 텍스트 화면이 표시되지는 않습니다. 대신 UMDF 버그를 확인합니다.

  • 메모리 덤프 파일을 만들고 파일을 컴퓨터의 로그 파일 디렉터리에 저장합니다(예: %windir%\System32\LogFiles\WUDF\Xxx.dmp).

    참고 UMDF 2.15부터 로그 디렉터리가 %ProgramData%\Microsoft\WDF에 있습니다.

  • Microsoft에 대한 오류 보고서를 만듭니다(선택 사항).

  • 디버거가 컴퓨터에 연결되어 있으면 실행을 중단합니다.

  • 호스트 프로세스를 종료하고 디바이스를 사용하지 않도록 설정합니다.

UMDF 2.0부터 UMDF 검증 도구는 경우에 따라 브레이크 포인트를 설정하고, 다른 경우에는 UMDF 버그 검사를 유발합니다. 이 동작은 KMDF 검증 도구의 동작과 유사합니다.

강력히 권장합니다: WUDFHost.exe에서 Application Verifier(AppVerif.exe)을 사용하도록 설정한 후 드라이버의 모든 개발 및 테스트를 수행하십시오. 다음 명령을 사용하여 디버거를 연결한 다음 다시 부팅합니다.

AppVerif -enable Heaps Exceptions Handles Locks Memory TLS Leak -for WudfHost.exe

UMDF 버전 2.0부터 드라이버 호스트 프로세스(Wudfhost)에서 애플리케이션 검증 도구 실행하는 경우 UMDF 검증 도구는 해당 호스트의 모든 UMDF 2.0 드라이버와 이후 드라이버 호스트 프로세스의 모든 UMDF 2.0 드라이버에 대해 자동으로 사용하도록 설정됩니다.

UMDF 1.11 이전 버전에서는 프레임워크의 검증 도구가 항상 켜지고 해제할 수 없습니다.

UMDF 검증 도구 사용 및 사용 안 함

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<드라이버 이름> 레지스트리 키의 드라이버 Parameters\Wdf 하위 키에서 VerifierOn을 0이 아닌 값으로 설정하여 UMDF 검증 도구(Verifier)를 직접 활성화할 수 있습니다.

참고VerifierOn 값이 존재하면, 0으로 설정되어 있더라도, Application Verifier와의 연결을 무시하게 됩니다. 따라서 값을 0으로 설정하지 않고 강제로 적용하지 않는 경우 값을 삭제하는 것이 좋습니다.

UMDF 검증 도구를 사용할 수 있는지 여부를 확인하려면 드라이버가 WdfDriverCreate호출한 후 위치에서 중단점을 설정하고 !wdfdriverinfo 디버거 확장 명령을 사용합니다.

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

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

검증 도구의 동작 제어

레지스트리의 값을 수정하여 UMDF 검증 도구의 동작을 제어할 수 있습니다. 또는 WDF 검증 도구 제어 애플리케이션 사용하여 이러한 값을 설정할 수 있습니다.

다음 레지스트리 값은 UMDF 1 드라이버와x 드라이버, 그리고 UMDF 2.0 이상 드라이버에서도 사용할 수 있습니다.

VerifyDownLevel (REG_DWORD)
verifyDownLevel 0이 아닌 값으로 설정되어 있고 드라이버가 현재 버전보다 오래된 프레임워크 버전으로 빌드된 경우 프레임워크의 검증 도구에는 드라이버가 빌드된 후에 추가된 테스트가 포함됩니다. 이 값이 없거나 0으로 설정된 경우 프레임워크의 검증 도구에는 드라이버가 빌드될 때 존재했던 테스트만 포함됩니다.

예를 들어 드라이버가 프레임워크 버전 1.7로 빌드되고 프레임워크 버전 1.9가 컴퓨터에 설치된 경우 verifyDownLevel 0이 아닌 값으로 설정하면 드라이버가 실행될 때 검증 도구 버전 1.9에 추가된 테스트가 검증 도구에 포함됩니다.

이 값은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\DriverName 레지스트리 키의 Parameters\Wdf 하위 키에 있습니다.

TrackObjects(REG_DWORD)
TrackObjects 값이 0이 아닌 경우, 프레임워크 기반 개체가 누수된 상태로 삭제되지 않았다면 드라이버가 언로드될 때 프레임워크가 디버깅 모드에 들어갑니다.

정기적으로 테스트를 하는 동안 TrackObjects를 사용하도록 설정하고, TrackRefCounts는 설정하지 말아야 합니다. 검증 도구가 드라이버가 프레임워크 개체를 누출하고 있다고 보고하는 경우 컨트롤 애플리케이션을 사용하여 TrackRefCounts 검증 도구 옵션을 사용하도록 설정합니다.

이 값은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services 레지스트리 키의 DefaultHostProcessGuid 하위 키에 있습니다. 여기서 DefaultHostProcessGuidHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 하위 키에서 찾을 수 있는 값입니다.

TrackRefCounts(REG_DWORD)
TrackRefCounts 0이 아닌 값으로 설정된 경우 프레임워크는 각 프레임워크 기반 개체에 대한 참조 수를 유지 관리합니다. !wudfrefhist 디버거 확장을 사용하여 개체의 참조 개수 변경 내용을 볼 수 있습니다.

TrackRefCounts 0이 아닌 값으로 설정하면 드라이버 성능이 저하되므로 개체 삭제 버그를 디버깅하지 않는 한 값을 0으로 유지해야 합니다.

이 값은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services 레지스트리 키의 DefaultHostProcessGuid 하위 키에 있습니다. 여기서 DefaultHostProcessGuidHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 하위 키에서 찾을 수 있는 값입니다.

위에 나열된 레지스트리 값 외에도 UMDF 2.0 이상 드라이버는 KMDF 검증 도구사용하여 나열된 많은 레지스트리 값을 사용할 수 있습니다.