Windows 硬件错误体系结构的组件

下图显示了 Windows 硬件错误体系结构(WHEA)的主要组件。

该图显示了变更器驱动程序、用户模式应用程序和服务、大容量存储和端口驱动程序以及更改器设备之间的关系。

对于作系统发现的每个硬件 错误源 ,都有相应的 低级别硬件错误处理程序 (LLHEH)。 LLHEH 是在响应硬件错误条件时运行的第一个操作系统代码。 LLHEH 可以是中断处理程序、异常处理程序、轮询例程或系统固件调用的回调例程。 每个 LLHEH 在最合适的软件模块中实现:对于 I/O 总线,它们存在于各自的总线驱动程序中;对于平台陷阱处理程序,它们存在于作系统内核或硬件抽象层(HAL) 中。

每个 LLHEH 执行以下任务:

  • 确认硬件错误。

  • 捕获与硬件错误相关的可用错误信息。

  • 将硬件错误状态报告给操作系统。

通常,LLHEH 直接与硬件和固件交互,以检索硬件错误信息。 LLHEHs 将所有与硬件错误相关的信息编译为硬件错误数据包。 在固件最初处理硬件错误的情况下,相应的 LLHEH 与固件交互以检索错误数据包。 所有 LLHEHs 通过将硬件错误信息包数据传递给通用错误报告函数,向 Windows 操作系统内核报告硬件错误。

LLHEH 和 Windows 内核都利用 特定于平台的硬件错误驱动程序 (PSHED)的服务来收集特定于平台的错误信息。 PSHED 通过隐藏平台的错误处理机制的详细信息,并向 Windows 操作系统公开一致的接口,提供硬件错误报告设施的抽象。 在涉及硬件错误处理资源的系统固件接口的平台上,PSHED 处理与固件的交互。 这允许核心 Windows 组件仅访问被视为体系结构的错误状态寄存器,同时提供一种机制,通过该机制可以获取更丰富、更详细的特定于平台的硬件错误信息。

对于每个处理器体系结构(x86、x64 和 Itanium),Microsoft提供了一个 PSHED,该 PSHED 实现该体系结构通用的核心错误处理行为。 平台供应商可以通过提供利用特定于平台的功能的 PSHED 插件来补充默认 PSHED 功能。 PSHED 插件是一种特殊用途的 Windows 设备驱动程序,其实现了一个由 PSHED 调用的回调接口。 PSHED 插件的目的是增强或替代Microsoft提供的 PSHED 的默认行为。

PSHED 插件旨在由平台供应商实现,作为硬件平台硬件错误报告和恢复功能的软件接口。 PSHED 插件可以使用平台供应商定义的任何专用接口或机制来与平台固件进行交互。 这样,平台供应商就可以继续使用现有固件进行硬件错误处理。 Microsoft预计将标准化更多的硬件错误报告和恢复功能。 因此,对用于常规错误处理和报告的 PSHED 插件需求将会减少,只有在支持提供超过标准硬件错误处理功能的特定供应商功能时,才需要使用 PSHED 插件。

有关如何实现 PSHED 插件的详细信息,请参阅 Platform-Specific 硬件错误驱动程序插件

当 LLHEH 通知硬件错误条件时,Windows 会创建一个标准化格式 的错误记录 ,用于描述硬件错误条件。 然后,Windows 将调用 PSHED,以便它可以将任何其他硬件错误信息添加到错误记录,以便更好地描述硬件错误条件。 如果安装了 PSHED 插件并注册以参与错误信息检索,PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充错误记录中的信息。 Windows 将所有硬件错误信息编译到错误记录后,它会在系统事件日志中记录错误信息,并通过引发 Windows 事件跟踪(ETW)事件通知用户模式应用程序。

在某些硬件错误条件下,作系统被迫重启系统以从错误中恢复。 在这些情况下,Windows 不会在系统事件日志中记录错误信息,也不会在系统重启后通知用户模式应用程序。 因此,在重启系统之前,作系统必须将错误记录保存到某种形式的非易失性存储。 PSHED 提供一个接口,作系统可以通过该接口存储和检索错误记录,以便在系统重启期间保留错误信息。 如果安装了 PSHED 插件并注册以参与错误记录持久性,则 PSHED 插件可以提供特定于平台的实现来存储和检索错误记录。 重新启动系统后,作系统将检索保存的错误记录,以便可以正确记录在系统事件日志中,并通知用户模式应用程序。

有关 WHEA 如何处理硬件错误的详细信息,请参阅 错误处理

Windows 还提供硬件错误管理 API,以便用户模式错误管理应用程序可以设置和检索硬件错误源信息、为特定错误源配置错误处理,并将硬件错误注入硬件平台以进行测试。

有关如何实现 WHEA 管理应用程序的详细信息,请参阅 WHEA 管理应用程序