WER 보고서에서 UMDF 메타데이터 액세스
이 항목에서는 UMDF(User-Mode Driver Framework)가 충돌할 때 운영 체제가 만드는 WER(Windows 오류 보고) 보고서의 위치와 내용에 대해 설명합니다.
시스템은 세 가지 UMDF 이벤트 유형인 WUDFHostProblem, WUDFUnhandledException 및 WUDFVerifierFailure에 대한 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 | 문제 | 이 필드에는 다음 값 중 하나가 포함됩니다.
|
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의 MajorFunction 및 MinorFunction 을 나타냅니다. 예를 들어 위의 샘플 보고서에서 이 필드에는 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 | 구성 요소 | 이 필드에는 다음 값 중 하나가 포함됩니다.
|
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 | 범주 | 이 필드에는 다음 값 중 하나가 포함됩니다.
|
3 | ErrorNumber | 내부적으로만 사용됩니다. |
4 | 위치 | 내부적으로만 사용됩니다. |
5 | 드라이버 | 실패한 드라이버 모듈의 이름입니다. |
6 | CallerAddress | 보고서 생성을 시작한 루틴의 주소입니다. |
7 | UMDFVersion | 현재 사용 중인 UMDF 라이브러리의 버전을 지정합니다. 사용자가 프레임워크 라이브러리를 업데이트하기 위한 조치를 취한 경우 운영 체제와 함께 제공되는 버전보다 최신 버전일 수 있습니다. |
8 | HardwareId | Windows 8 하드웨어 ID는 별도의 파일에 제공됩니다. 이 경우 프레임워크는 이 값을 별도로 덤프로 설정합니다. |