다음을 통해 공유


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는 별도의 파일에 제공됩니다. 이 경우 프레임워크는 이 값을 별도로 덤프로 설정합니다.