User-Mode 드라이버 프레임워크(UMDF) 버전 2부터 Wdfkd.dll 구현된 디버거 확장 명령의 하위 집합을 사용하여 UMDF 드라이버를 디버그할 수 있습니다. 이 문서에서는 UMDF 드라이버 문제를 해결하는 데 사용할 수 있는 명령에 대해 설명합니다.
UMDF 2.0 드라이버가 충돌한 이유 확인
드라이버 호스트 프로세스가 종료되면 드라이버가 콜백에서 호스트 시간 제한 임계값을 초과하는 문제가 발생할 수 있습니다. 이 경우 리플렉터가 드라이버 호스트 프로세스를 종료합니다.
조사하려면 먼저 UMDF 드라이버디버깅을 사용하도록 설정하는 방법에 설명된 대로 커널 모드 디버깅 세션을 설정합니다. UMDF 드라이버의 모든 개발 및 테스트는 테스트 시스템에 커널 디버거를 연결하고 WUDFHost.exe에서 Application Verifier(AppVerif.exe)를 활성화한 상태로 강력히 권장합니다. 다음 명령을 사용하여 커널 디버거를 연결한 다음 다시 부팅합니다.
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
만약 HostFailKdDebugBreak이 설정된 경우, 시간 제한 임계값을 초과하면 리플렉터가 커널 모드 디버거로 중단을 시작합니다. 디버거 출력에는 선택할 수 있는 링크를 포함하여 시작하는 방법에 대한 몇 가지 제안이 표시됩니다. 다음은 그 예입니다.
**** Problem detected in UMDF driver "WUDFOsrUsbFx2". !process 0xFFFFE0000495B080 0x1f, !devstack 0xFFFFE000032BFA10, Problem code 3 **** **** Dump UMDF driver image name and stack: !wdfkd.wdfumdevstack 0x000000BEBB49AE20 **** Dump UM Irps for this stack: !wdfkd.wdfumirps 0x000000BEBB49AE20 **** Dump UMDF trace log: !wmitrace.logdump WUDFTrace **** Helpful UMDF debugger extension commands: !wdfkd.wdfhelp **** Note that driver host process may get terminated if you go past this break, making it difficult to debug the problem!
!analyze 사용하여 오류 및 시도할 수 있는 다른 UMDF 확장 명령에 대한 정보를 표시합니다. 이 명령은 UMDF 검증 도구 오류 또는 UMDF 처리되지 않은 예외에 도움이 될 수 있습니다. %ProgramData%\Microsoft\WDF에서 사용자 크래시 덤프 파일을 라이브 커널 디버깅 또는 디버깅하는 데 사용할 수 있습니다.
!process 0 0x1f wudfhost.exe 사용하여 스레드 스택 정보를 포함하여 모든 Wudfhost.exe 드라이버 호스트 프로세스를 나열합니다.
!wdfkd.wdfumtriage 및 !wdfkd.wdfldr 사용하여 현재 WDF에 바인딩된 모든 드라이버를 표시할 수도 있습니다. UMDF 드라이버의 이미지 이름을 선택하면 디버거에 호스팅 프로세스의 주소가 표시됩니다. 그런 다음 프로세스 주소를 선택하여 해당 프로세스와 관련된 정보를 표시할 수 있습니다.
필요한 경우 .process /r /p Process 사용하여 프로세스 컨텍스트를 드라이버를 호스팅하는 Wudfhost 프로세스의 컨텍스트로 전환합니다. .cache forcedecodeuser 및 lmu 사용하여 드라이버가 현재 프로세스에서 호스트되는지 확인합니다.
스레드 호출 스택(!thread Address)을 검사하여 드라이버 콜백 시간이 초과되었는지 확인합니다. 스레드의 틱 수를 확인합니다. Windows 8.1에서는 리플렉터가 1분 간 대기 후 시간 초과가 발생합니다.
!wdfkd.wdfdriverinfo MyDriver.dll 0x10를 사용하여 장치 트리를 자세히 표시합니다. 그런 다음, !wdfdevice선택합니다. 이 명령은 자세한 전원, 전원 정책 및 PnP(플러그 앤 플레이) 상태 정보를 표시합니다.
!wdfkd.wdfumirps 사용하여 보류 중인 IRP를 찾습니다.
!wdfkd.wdfdevicequeues 사용하여 드라이버 큐의 상태를 확인합니다.
커널 모드 디버깅 세션에서 !wmitrace.logdump WudfTrace 사용하여 추적 로그를 표시할 수 있습니다.
UMDF 2.0 IFR 로그 표시
커널 모드 디버깅 세션에서 사용할 수 있는 경우 !wdfkd.wdflogdump 확장 명령을 사용하여 WDF(Windows 드라이버 프레임워크) IFR(In-flight Recorder) 로그 레코드를 표시할 수 있습니다.
메모리 덤프 파일 찾기
사용자 모드 덤프 파일 찾기에 대한 자세한 내용은 리플렉터가 호스트 프로세스 종료한 이유를 확인하세요. LogMinidumpType 레지스트리 값을 설정하여 미니덤프 파일에 저장된 정보의 유형을 지정하는 방법에 대한 자세한 내용은 UMDF 드라이버 WPP 소프트웨어 추적 사용 참조하세요.