WER 보고서에서 UMDF 메타데이터 액세스

이 항목에서는 UMDF(User-Mode Driver Framework)가 충돌할 때 운영 체제가 만드는 WER(Windows 오류 보고) 보고서의 위치와 내용에 대해 설명합니다.

시스템은 세 가지 UMDF 이벤트 유형인 WUDFHostProblem, WUDFUnhandledExceptionWUDFVerifierFailure에 대한 WER 보고서를 생성합니다.

리플렉터가 드라이버 호스트 프로세스를 종료할 때 호스트 시간 제한 임계값을 초과하여 시스템에서 WER 정보를 포함하는 Report.wer이라는 파일을 생성합니다. 특히 Report.wer에는 라이브 디버깅 대상에 액세스할 수 없는 UMDF 드라이버를 디버그하려는 경우에 유용할 수 있는 UMDF 메타데이터가 포함되어 있습니다.

Windows 8.1 C:\ProgramData\Microsoft\Windows\WER\ReportQueue 디렉터리에서 Report.wer 파일을 찾을 수 있습니다. 이 디렉터리에서 가장 최근 NonCritical_HostProblem_* 폴더를 열고 Report.wer를 찾습니다.

다음 PowerShell 명령을 사용하여 UMDF에 대한 WER 보고서에 액세스할 수도 있습니다.

get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt

WUDFHostProblem 샘플 보고서

다음은 WUDFHostProblem 형식의 샘플 UMDF WER 보고서입니다. 위에서 설명한 ReportQueue 디렉터리에서 가져온 것입니다. PowerShell을 사용하여 보고서를 검색하는 경우 필드에 Sig[0], Sig[1], Sig[2] 대신 P0, P1, P2 레이블이 지정될 수 있습니다. 그렇지 않으면 필드가 동일하고 가능한 값이 동일합니다. 이 샘플은 OSR USB-FX2 하드웨어 참조 보드를 사용하는 WDK 샘플 중 하나에서 생성되었습니다.

Sig[0].Name=EventClass
Sig[0].Value=HostProblem
Sig[1].Name=Problem
Sig[1].Value=HostTimeout
Sig[2].Name=DetectedBy
Sig[2].Value=2
Sig[3].Name=UMDFVersion
Sig[3].Value=6.3.9600
Sig[4].Name=ExitCode
Sig[4].Value=103
Sig[5].Name=Operation
Sig[5].Value=3
Sig[6].Name=Message
Sig[6].Value=11b00
Sig[7].Name=Status
Sig[7].Value=ffffffff
Sig[8].Name=HardwareId
Sig[8].Value=USB\VID_0547&PID_1002&REV_0000

WUDFHostProblem 필드

다음 표에서는 WUDFHostProblem 형식의 보고서에서 필드에 사용할 수 있는 값을 설명합니다.

인덱스 속성
0 EventClass

프레임워크는 이 값을 HostProblem으로 설정합니다.

1 문제

이 필드에는 다음 값 중 하나가 포함됩니다.

  • HostFailure
  • SendFailure
  • HostTimeout
  • BadRequest
  • BadReply
  • HostFailure
  • 기타
  • HostDisconnect
  • LeakedHandle
  • InvalidInterruptState
  • IsrTimedOut
2 DetectedBy

다음 열거형 값 중 하나를 포함합니다.

cpp WdfComponentInvalid = 0, WdfComponentPlatform, WdfComponentReflector, WdfComponentDriverManager, WdfComponentHost, WdfComponentFramework, WdfComponentTest, WdfComponentMax
3 UMDFVersion

현재 사용 중인 UMDF 라이브러리의 버전을 지정합니다. 사용자가 프레임워크 라이브러리를 업데이트하기 위한 조치를 취한 경우 운영 체제와 함께 제공된 버전보다 최신 버전일 수 있습니다.

4 ExitCode

다음 열거형 값 중 하나를 포함합니다.

cpp WdfHostExit_StillActive = 0x103, WdfHostExit_CodeUnknown = 0x70000000, WdfHostExit_InternalDriverStopReported, WdfHostExit_InternalDriverStopReportFailed, WdfHostExit_ExternalTermination

WdfHostExit_StillActive 프레임워크가 오류 보고서를 만들 때 호스트 프로세스가 실행 중임을 나타냅니다.

5 작업

다음 열거형 값 중 하나를 포함합니다.

cpp WudfOperation_Invalid, WudfOperation_Init, WudfOperation_HostShutdown, WudfOperation_Pnp, WudfOperation_Cleanup, WudfOperation_Close, WudfOperation_Cancel, WudfOperation_IO, WudfOperation_Interrupt, WudfOperation_PoFx, WudfOperation_Other, WudfOperation_Max
6 메시지

이 필드의 첫 번째 숫자는 항상 1이며, 이는 IRP가 작업에 관여하고 있음을 나타냅니다. 이후 숫자 쌍은 각각 IRP의 MajorFunctionMinorFunction 을 나타냅니다.

예를 들어 위의 샘플 보고서에서 이 필드에는 11b00 값이 포함됩니다. 즉, 리플렉터에서 주요 함수 값이 IRP_MJ_PNP이고 부 함수 값이 IRP_MN_START_DEVICE(1 = IRP 메시지, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE)인 드라이버 호스트 프로세스를 대신하여 리플렉터에서 처리한 IRP입니다.

7 상태

프레임워크는 항상 이 값으로 설정하여 0xffffffff.

8 HardwareId

이 필드에는 문제가 있는 드라이버와 연결된 디바이스의 하드웨어 ID가 포함되어 있습니다.

WUDFUnhandledException 필드

다음 표에서는 WUDFUnhandledException 형식의 보고서에서 필드에 사용할 수 있는 값을 설명합니다.

인덱스 속성
0 EventClass

프레임워크는 이 값을 UnhandledException으로 설정합니다.

1 구성 요소

이 필드에는 다음 값 중 하나가 포함됩니다.

  • 올바르지 않음
  • 플랫폼
  • Reflector
  • DriverManager
  • 호스트
  • 프레임워크
  • 테스트
2 ExceptionCode

예외가 발생한 이유입니다. 값 목록은 EXCEPTION_RECORD 참조하세요.

3 RelativeFaultingAddress

예외가 발생한 주소입니다.

4 CrashingModuleName 예외를 발생시킨 드라이버의 이름입니다.
5 CrashingFileVersion 드라이버의 프레임워크 버전입니다.
6 LastDriverName 드라이버 스택에서 UMDF가 아닌 첫 번째 드라이버 구성 요소의 이름입니다.
7 LastDriverVersion 드라이버 스택에 있는 첫 번째 비 UMDF 드라이버 구성 요소의 버전 번호입니다.
8 UMDFVersion

현재 사용 중인 UMDF 라이브러리의 버전을 지정합니다. 사용자가 프레임워크 라이브러리를 업데이트하기 위한 조치를 취한 경우 운영 체제와 함께 제공되는 버전보다 최신 버전일 수 있습니다.

9 HardwareId

Windows 8 하드웨어 ID는 별도의 파일에 제공됩니다. 이 경우 프레임워크는 이 값을 별도로 덤프로 설정합니다.

WUDFVerifierFailure 필드

다음 표에서는 WUDFVerifierFailure 형식의 보고서에서 필드에 대한 가능한 값을 설명합니다.

인덱스 속성
0 EventClass

프레임워크는 이 값을 VerifierFailure로 설정합니다.

1 FoundBy

프레임워크는 이 값을 Framework로 설정합니다.

2 범주

이 필드에는 다음 값 중 하나가 포함됩니다.

  • 내부
  • 드라이버
  • Caller
  • 외부
  • UnhandledException
3 ErrorNumber 내부 전용입니다.
4 위치 내부 전용입니다.
5 드라이버 실패한 드라이버 모듈의 이름입니다.
6 CallerAddress 보고서 생성을 시작한 루틴의 주소입니다.
7 UMDFVersion

현재 사용 중인 UMDF 라이브러리의 버전을 지정합니다. 사용자가 프레임워크 라이브러리를 업데이트하기 위한 조치를 취한 경우 운영 체제와 함께 제공되는 버전보다 최신 버전일 수 있습니다.

8 HardwareId

Windows 8 하드웨어 ID는 별도의 파일에 제공됩니다. 이 경우 프레임워크는 이 값을 별도로 덤프로 설정합니다.