访问 WER 报表中的 UMDF 元数据
本主题介绍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 | 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 | Operation | 包含以下枚举值之一: 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 | 此字段包含与有问题的驱动程序关联的设备的硬件 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 在单独的文件中提供。 在这种情况下,框架将此值设置为 单独转储。 |