UMDF 2.0 드라이버 충돌 문제 해결
User-Mode 드라이버 프레임워크(UMDF) 버전 2부터 Wdfkd.dll 구현된 디버거 확장 명령의 하위 집합을 사용하여 UMDF 드라이버를 디버그할 수 있습니다. 이 문서에서는 UMDF 드라이버 문제를 해결하는 데 사용할 수 있는 명령에 대해 설명합니다.
UMDF 2.0 드라이버가 충돌한 이유 확인
드라이버 호스트 프로세스가 종료되면 드라이버가 콜백에서 호스트 시간 제한 임계값을 초과하는 문제가 발생할 수 있습니다. 이 경우 리플렉터가 드라이버 호스트 프로세스를 종료합니다.
조사하려면 먼저 UMDF 드라이버의 디버깅을 사용하도록 설정하는 방법에 설명된 대로 커널 모드 디버깅 세션을 설정합니다. 테스트 시스템에 연결된 커널 디버거를 사용하여 UMDF 드라이버의 모든 개발 및 테스트를 수행하고 WUDFHost.exe 애플리케이션 검증 도구(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를 사용하여 드라이버가 현재 프로세스에서 호스트되는지 확인합니다.
스레드 호출 스택(!스레드 주소)을 검사하여 드라이버 콜백 시간이 초과되었는지 확인합니다. 스레드의 틱 수를 확인합니다. 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 Driver Frameworks) IFR(진행 중인 레코더) 로그 레코드를 표시할 수 있습니다.
메모리 덤프 파일 찾기
사용자 모드 덤프 파일을 찾는 방법에 대한 자세한 내용은 Reflector가 호스트 프로세스를 종료한 이유 확인 을 참조하세요. LogMinidumpType 레지스트리 값을 설정하여 미니덤프 파일에 저장된 정보의 유형을 지정하는 방법에 대한 자세한 내용은 UMDF 드라이버에서 WPP 소프트웨어 추적 사용을 참조하세요.