Reflector가 호스트 프로세스를 종료한 이유 확인

이 항목에서는 리플렉터가 드라이버 호스트 프로세스(WUDFHost.exe)를 종료한 이유 또는 드라이버 호스트 프로세스가 중단된 이유를 분석하는 방법에 대해 설명합니다.

리플렉터가 호스트 프로세스를 종료하는 가장 일반적인 이유는 UMDF 호스트 프로세스 제한 시간이 만료되기 때문입니다.

테스트 시스템에 연결된 커널 디버거를 사용하여 UMDF 드라이버의 모든 개발 및 테스트를 수행하고 WUDFHost.exe 애플리케이션 검증 도구(AppVerif.exe)를 사용하도록 설정하는 것이 좋습니다. 다음 명령을 사용하여 커널 디버거를 연결한 다음 다시 부팅합니다.

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

덤프 파일 사용

UMDF 드라이버가 충돌하거나 문제가 발생하면 커널 디버거에서 중단이 보고됩니다. 커널 디버거에서 사용자 모드 예외가 보고되면 이러한 문제를 디버깅해야 합니다. 커널 디버거 중단은 문제가 있는(응답하지 않는) UMDF 드라이버로 인해 드라이버 호스트 프로세스를 종료하기 전에 WudfRd.sys 보고됩니다. 또한 다음 위치에서 보고된 로그 및 힙 덤프를 찾을 수 있습니다. UMDF에서 캡처한 덤프 파일을 검토하려면 다음 단계를 수행합니다.

  1. %ProgramData%\Microsoft\WDF 디렉터리에서 최신 .dmp 파일을 찾습니다. Windows 10 1507과 함께 제공되는 UMDF 2.15 이전에는 로그 디렉터리가 %windir%\system32\LogFiles\WUDF 아래에 있습니다.

  2. 다음 명령을 사용하여 최신 .dmp 파일을 디버거에 로드합니다.

    WinDbg -z <path to the .dmp file>
    
  3. 종료 시 스레드의 상태를 확인합니다.

힙 덤프를 캡처해야 하는 경우 테스트 시 다음 레지스트리 값을 설정하고 테스트를 실행하기 전에 테스트 시스템을 다시 부팅합니다. 시스템 애플리케이션 이벤트 로그의 %SystemRoot%\System32\Winevt\Logs\Application.evtx에서 Windows 오류 보고 기록을 검사할 수도 있습니다.

reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogMinidumpType /t REG_DWORD /d 0x1122
reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogEnable /t REG_DWORD /d 1 

디버거 사용

다른 경우에는 리플렉터가 호스트 프로세스를 종료한 이유를 확인하기 위해 라이브 커널 모드 대상에 연결해야 할 수 있습니다. 디버깅 세션을 설정하려면 UMDF 드라이버의 디버깅을 사용하도록 설정하는 방법에 설명된 단계를 따릅니다.

연결을 설정한 후에는 !wdfkd.wdfumtriage를 사용하여 UMDF 드라이버를 검사하고 !wdfkd.wdfumirps UMDF 디버거 확장(!wudfext.umirps for UMDF 버전 1)을 사용하여 미해결 IRP를 표시합니다.

  • PnP IRP 또는 전원 IRP가 보류 중인 경우 드라이버가 호스트 프로세스의 스레드를 검사하여 IRP가 중단되는 이유를 확인합니다.

    !process 확장을 사용하여 호스트 프로세스 에서 실행 중인 스레드를 검사할 수 있습니다. 0x1f 플래그 값은 각 스레드에 대한 스택 추적을 보여줍니다.

    !process <addr> 0x1f

  • 드라이버가 취소된 IRP를 신속하게 완료하지 않은 경우 취소된 IRP 및 완료되지 않은 이유를 확인합니다.

  • 정리 또는 닫기 IRP가 보류 중인 경우 IRP가 처리하는 데 시간이 오래 걸리는 이유를 확인합니다.