Windows 硬件错误体系结构的组件
下图显示了 Windows 硬件错误体系结构 (WHEA) 的主要组件。
对于操作系统发现的每个硬件 错误源 ,有一个相应的 低级别硬件错误处理程序 (LLHEH) 。 LLHEH 是响应硬件错误条件而运行的第一个操作系统代码。 LLHEH 可以是中断处理程序、异常处理程序、轮询例程或系统固件调用的回调例程。 每个 LLHEH 在最合适的软件模块中实现:对于 I/O 总线,它们存在于各自的总线驱动程序中;对于平台陷阱处理程序,它们存在于操作系统内核或硬件抽象层 (HAL) 中。
每个 LLHEH 执行以下任务:
确认硬件错误。
捕获与硬件错误相关的可用错误信息。
向操作系统报告硬件错误情况。
通常,LLHEH 直接与硬件和固件交互以检索硬件错误信息。 LLHEH 将所有与硬件错误相关的信息编译为硬件错误数据包。 在固件最初处理硬件错误的情况下,相应的 LLHEH 与固件交互以检索错误数据包。 所有 LLHEH 通过将硬件错误数据包数据传递给通用错误报告函数,向 Windows 操作系统内核报告硬件错误。
LLHEH 和 Windows 内核都利用 特定于平台的硬件错误驱动程序 (PSHED) 的服务来收集特定于平台的错误信息。 PSHED 通过从操作系统中隐藏平台错误处理机制的详细信息,向 Windows 操作系统公开一致的接口,来抽象底层平台的硬件错误报告工具。 在涉及硬件错误处理资源的系统固件接口的平台上,PSHED 处理与固件的接口。 这允许核心 Windows 组件仅访问被视为体系结构的错误状态寄存器,同时提供一种机制,通过该机制可以获取更丰富、更详细的特定于平台的硬件错误信息。
对于 x86、x64 和 Itanium) (处理器体系结构,Microsoft 提供了一个 PSHED,用于实现该体系结构通用的核心错误处理行为。 平台供应商可以通过提供利用特定于平台的功能的 PSHED 插件来补充默认 PSHED 功能。 PSHED 插件是实现 PSHED 调用的回调接口的特殊用途 Windows 设备驱动程序。 PSHED 插件的目的是增强或替代 Microsoft 提供的 PSHED 的默认行为。
PSHED 插件旨在由平台供应商实现,作为硬件平台硬件错误报告和恢复功能的软件接口。 PSHED 插件可以使用平台供应商定义的任何专用接口或机制来与平台固件进行交互。 这允许平台供应商继续使用现有固件来处理硬件错误。 随着时间的推移,Microsoft 预计更多的硬件错误报告和恢复功能将标准化。 因此,对 PSHED 插件进行常规错误处理和报告的需求将减少,因此,仅支持供应商特定的功能(提供超出标准硬件错误处理功能的额外价值)时,才需要 PSHED 插件。
有关如何实现 PSHED 插件的详细信息,请参阅 特定于平台的硬件错误驱动程序插件。
当 LLHEH 通知硬件错误条件时,Windows 会以描述硬件错误条件的标准化格式创建错误 记录 。 然后,Windows 会调用 PSHED,以便它可以向错误记录添加任何其他硬件错误信息,以便更好地描述硬件错误情况。 如果安装了 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充错误记录中的信息。 Windows 将所有硬件错误信息编译到错误记录中后,它会在系统事件日志中记录错误信息,并通过引发 Windows (ETW) 事件跟踪来通知用户模式应用程序。
在某些硬件错误情况下,操作系统被迫重启系统以从错误中恢复。 在这些情况下,Windows 不会在系统事件日志中记录错误信息,也不会在系统重启后通知用户模式应用程序。 因此,在重新启动系统之前,操作系统必须将错误记录保存到某种形式的非易失性存储中。 PSHED 提供了一个接口,操作系统通过该接口可以存储和检索错误记录,以便在系统重启期间保留错误信息。 如果已安装 PSHED 插件并注册为参与错误记录持久性,则 PSHED 插件可以提供特定于平台的实现来存储和检索错误记录。 重新启动系统时,操作系统会检索保存的错误记录,以便它可以正确记录在系统事件日志中,并可以通知用户模式应用程序。
有关 WHEA 如何处理硬件错误的详细信息,请参阅 错误处理。
Windows 还提供硬件错误管理 API,以便用户模式错误管理应用程序可以设置和检索硬件错误源信息,为特定错误源配置错误处理,并将硬件错误注入硬件平台以进行测试。
有关如何实现 WHEA 管理应用程序的详细信息,请参阅 WHEA 管理应用程序。