本主題描述當 User-Mode 驅動程式框架 (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 | 探測者 | 包含下列其中一個列舉值: 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 的 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 | 相對錯誤地址 | 發生例外狀況的位址。 |
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 開始,硬體識別碼會在個別的檔案中提供。 在這裡情況下,架構會將此值設定為 個別傾印。 |