共用方式為


存取 WER 報表中的 UMDF 元數據

本主題描述當 User-Mode 驅動程式框架 (UMDF) 發生當機時,操作系統所產生的 Windows 錯誤回報 (WER) 的內容和位置。

系統會針對三種不同的 UMDF 事件類型產生 WER 報告:WUDFHostProblemWUDFUnhandledException,以及 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 問題

此欄位包含下列其中一個值:

  • 主機故障
  • 發送失敗
  • HostTimeout
  • 錯誤的請求
  • 不良回覆
  • 主機故障
  • 其他
  • 主機斷線
  • LeakedHandle
  • InvalidInterruptState
  • IsrTimedOut
2 探測者

包含下列其中一個列舉值:

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

指定目前使用中的 UMDF 連結庫版本。 請注意,如果使用者採取動作更新框架庫,這可能是比作業系統隨附的版本更晚的版本。

4 結束碼

包含下列其中一個列舉值:

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,其主要功能值為 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 元件

此欄位包含下列其中一個值:

  • 無效
  • 平台
  • 反射鏡
  • DriverManager
  • 主持人
  • 框架
  • 測試
2 ExceptionCode

發生例外狀況的原因。 如需值清單,請參閱 EXCEPTION_RECORD

3 相對錯誤地址

發生例外狀況的位址。

4 CrashingModuleName 引發例外狀況的驅動程式名稱。
5 CrashingFileVersion 驅動程式的架構版本。
6 最後的駕駛員姓名 驅動程式堆疊中第一個非UMDF驅動程式元件的名稱。
7 LastDriverVersion 驅動程式堆疊中第一個非UMDF驅動程式元件的版本號碼。
8 UMDFVersion

指定目前使用中的 UMDF 連結庫版本。 請注意,如果使用者採取行動更新框架程式庫,這可能是比作業系統隨附的版本更新的版本。

9 HardwareId

從 Windows 8 開始,硬體識別碼會在個別的檔案中提供。 在這裡情況下,架構會將此值設定為 個別傾印

WUDFVerifierFailure 欄位

下表描述 WUDFVerifierFailure類型之報表中字段的可能值。

索引 名稱 價值觀
0 EventClass

架構會將此值設定為 VerifierFailure

1 FoundBy

架構會將此值設定為 Framework

2 類別

此欄位包含下列其中一個值:

  • 內部
  • 司機
  • 來電者
  • 外部
  • 未處理的例外
3 錯誤編號 僅供內部使用。
4 地點 僅供內部使用。
5 司機 失敗的驅動程式模組名稱。
6 呼叫者地址 起始產生報表之例程的位址。
7 UMDFVersion

指定目前使用中的 UMDF 連結庫版本。 請注意,如果使用者執行了更新框架庫的操作,這個版本可能比隨作業系統提供的版本更新。

8 HardwareId

從 Windows 8 開始,硬體識別碼會在個別的檔案中提供。 在這裡情況下,架構會將此值設定為 個別傾印