错误处理

Windows 硬件错误体系结构 (WHEA) 以不同的方式处理硬件错误,具体取决于错误条件的分类。 有关硬件错误的不同分类的详细信息,请参阅 硬件错误和错误源

下面介绍了 WHEA 为响应每种类型的硬件错误条件而采取的操作序列。 有关这些操作中引用的 WHEA 组件的详细信息,请参阅 Windows 硬件错误体系结构的组件

更正了硬件错误

  1. 级别硬件错误处理程序 (LLHEH) 会收到硬件错误条件的通知。

  2. LLHEH 验证是否存在硬件错误。

  3. LLHEH 从错误源检索硬件错误信息,并使用错误数据填充硬件错误数据包。 此数据包的格式设置为 WHEA_ERROR_PACKET 结构。

  4. LLHEH 调用 特定于平台的硬件错误驱动程序 (PSHED) 以检索任何特定于平台的硬件错误信息。 如果已安装 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充返回给 LLHEH 的错误信息。

  5. LLHEH 调用 Windows 操作系统内核,向其传递错误数据包。

  6. Windows 内核创建 错误记录 ,并使用从 LLHEH 收到的错误数据包中的信息以及有关错误的其他信息(例如错误源、错误的严重性以及错误发生的次数)填充该记录。

  7. Windows 内核调用 PSHED,以允许 PSHED 向错误记录添加节。 如果安装了 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充错误记录中的信息。

  8. Windows 内核调用 PSHED 以清除错误源的状态寄存器。 如果已安装 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便可以清除错误源的状态寄存器。

  9. 如果硬件错误条件超过错误源的错误阈值,Windows 内核将生成 ETW 事件并将错误信息记录在系统事件日志中。

非严重未更正硬件错误

  1. LLHEH 会收到硬件错误状况的通知。

  2. LLHEH 验证是否存在硬件错误。

  3. LLHEH 从错误源检索硬件错误信息,并使用错误数据填充硬件错误数据包。

  4. LLHEH 调用 PSHED 以检索任何特定于平台的硬件错误信息。 如果已安装 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充返回给 LLHEH 的错误信息。

  5. LLHEH 调用 Windows 操作系统内核,向其传递错误数据包。

  6. Windows 内核创建 错误记录 ,并使用从 LLHEH 收到的错误数据包中的信息以及有关错误的其他信息(例如错误源、错误的严重性以及错误发生的次数)填充该记录。

  7. Windows 内核调用 PSHED,以允许 PSHED 向错误记录添加节。 如果安装了 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充错误记录中的信息。

  8. Windows 内核尝试通过尝试更正硬件错误条件来从错误中恢复。 然后,Windows 内核会调用 PSHED,使其有机会执行任何所需的恢复操作。 如果已安装 PSHED 插件并注册为参与错误恢复,则 PSHED 将反过来调用 PSHED 插件,以便它可以尝试更正错误和/或执行从错误条件中完全恢复所需的任何其他操作。

  9. 如果硬件错误已成功更正,Windows 内核将生成 ETW 事件,并将错误信息记录在系统事件日志中。 如果未更正硬件错误,Windows 内核会调用 PSHED 以保存错误记录。 如果已安装 PSHED 插件并注册为参与错误记录持久性,则 PSHED 将反过来调用 PSHED 插件,以便保存错误记录。 保存错误记录后,Windows 内核将生成一个 bug 检查。

严重未更正硬件错误

  1. LLHEH 会收到硬件错误状况的通知。

  2. LLHEH 验证是否存在硬件错误。

  3. LLHEH 从错误源检索硬件错误信息,并使用错误数据填充硬件错误数据包。

  4. LLHEH 调用 PSHED 以检索任何特定于平台的硬件错误信息。 如果已安装 PSHED 插件并注册为参与错误信息检索,则 PSHED 将反过来调用 PSHED 插件,以便它可以进一步扩充返回给 LLHEH 的错误信息。

  5. LLHEH 调用 Windows 操作系统内核,向其传递错误数据包。

  6. Windows 内核创建 错误记录 ,并使用从 LLHEH 收到的错误数据包中的信息以及有关错误的其他信息(例如错误源、错误的严重性以及错误发生的次数)填充该记录。

  7. Windows 内核调用 PSHED 以保存错误记录。 如果已安装 PSHED 插件并注册为参与错误记录持久性,则 PSHED 将反过来调用 PSHED 插件,以便保存错误记录。

  8. Windows 内核检查生成 bug。