在 Windows 10 上使用 WHEA

在 Windows 10 版本 2004 中,Windows 硬件错误体系结构(WHEA)包括一个新接口(v2)。 本页介绍如何注册为错误源并报告错误。

添加错误源

若要使用 WHEA v2 将 WHEA 注册为错误源,驱动程序应执行以下操作:

  1. 通过实例化WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER结构来指定设备驱动程序的配置,并提供指向WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVERWHEA_ERROR_SOURCE_UNINITIALIZE_DEVICE_DRIVER事件回调函数的指针。

  2. 调用 WheaAddErrorSourceDeviceDriver,提供配置结构。 通常,驱动程序从 DriverEntry 调用此例程。

    若要在以后删除错误源,请调用 WheaRemoveErrorSourceDeviceDriver

  3. 当错误源准备好报告错误时,WHEA 将调用驱动程序的 WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER 事件回调函数。 驱动程序接收 ErrorSourceId 作为回调的参数。

报告错误

若要报告错误,请同时按顺序执行以下步骤:

  1. 调用 WheaCreateHwErrorReportDeviceDriver,提供 ErrorSourceId,并(可选)为驱动程序提供 DeviceObject。 例程返回正在进行的错误的句柄。

  2. 若要向错误添加数据,请调用 WheaAddHwErrorReportSectionDeviceDriver,并提供错误句柄。 此函数将单个节添加到错误报告,并配置驱动程序提供的数据缓冲区。 驱动程序最多可以调用 WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER 中指定的 MaxSectionsPerReport 时间的此例程

    (可选)驱动程序可以调用 WheaHwErrorReportSetSeverityDeviceDriver 来设置数据包和分区的错误严重性。 另请参阅 WheaHwErrorReportSetSectionNameDeviceDriver,这是用于更新WHEA_ERROR_RECORD_标准版CTION_DESCRIPTOR结构的 FRUText 字段的帮助程序函数。

  3. 将错误数据复制到缓冲区集中。

  4. 再次调用 WheaHwErrorReportSubmitDeviceDriver,再次提供错误句柄。 此调用后,缓冲区集中的缓冲区不可用,句柄无效。

  5. 如果发生错误或错误不再有效,驱动程序可以选择调用 WheaHwErrorReportAbandonDeviceDriver 在这种情况下,不会向 WHEA 提交任何报告。

驱动程序必须在 WheaCreateHwErrorReportDeviceDriver 创建的每个句柄上调用 WheaHwErrorReportSubmitDeviceDriver WheaHwErrorReportAbandonDeviceDriver 否则,WheaRemoveErrorSourceDeviceDriver 可能会返回STATUS_RESOURCE_IN_U标准版。