存取 WER 報表中的 UMDF 中繼資料
本主題描述當User-Mode Driver Framework (UMDF) 當機時,作業系統所建立Windows 錯誤報告 (WER) 的位置和內容。
系統會針對三種不同的 UMDF 事件種類產生 WER 報告: WUDFHostProblem、 WUDFUnhandledException和 WUDFVerifierFailure。
當反映器終止驅動程式主機進程時,有時因為 超過主機逾 時臨界值,系統會產生名為 Report.wer 的檔案,其中包含 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 來擷取報表,欄位可能會標示為 P0、P1、P2,而不是 Sig[0]、Sig[1]、Sig[2]。 否則,欄位會相同,並包含相同的可能值。 此範例是從其中一個使用 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,其主要函式值為 IRP_MJ_PNP,次要函式值為 IRP_MN_START_DEVICE (1 = IRP 訊息,1b = IRP_MJ_PNP,00 = IRP_MN_START_DEVICE) 。 |
7 | 狀態 | 架構一律會將此值設定為 0xffffffff。 |
8 | HardwareId | 此欄位包含與發生問題的驅動程式相關聯的裝置硬體識別碼。 |
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 開始,硬體識別碼會在個別的檔案中提供。 在此情況下,架構會將此值設定 為 [個別傾印]。 |
WUDFVerifierFailure 欄位
下表描述 WUDFVerifierFailure之報表中欄位的可能值。
索引 | 名稱 | 值 |
---|---|---|
0 | EventClass | 架構會將此值設定為 VerifierFailure。 |
1 | FoundBy | 架構會將此值設定為 Framework。 |
2 | 類別 | 此欄位包含下列其中一個值:
|
3 | 錯誤號碼 | 僅供內部使用。 |
4 | 位置 | 僅供內部使用。 |
5 | 驅動程式 | 失敗的驅動程式模組名稱。 |
6 | CallerAddress | 起始產生報表之常式的位址。 |
7 | UMDFVersion | 指定目前使用的 UMDF 程式庫版本。 請注意,如果使用者採取更新架構程式庫的動作,這可能是作業系統隨附的版本。 |
8 | HardwareId | 從 Windows 8 開始,硬體識別碼會在個別的檔案中提供。 在此情況下,架構會將此值設定 為 [個別傾印]。 |