在 Windows 10 上使用 WHEA

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

添加错误源

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

  1. 通过实例化一个事件WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER,为设备驱动程序WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER配置WHEA_ERROR_SOURCE_UNINITIALIZE_DEVICE_DRIVER事件回调函数。

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

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

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

报告错误

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

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

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

    (可选)驱动程序可以调用 WheaHwErrorReportSetSeverityDeviceDriver 来设置数据包和节的错误严重性。 另请参阅 WheaHwErrorReportSetSectionNameDeviceDriver这是 一个帮助程序函数,用于更新 WHEA_ERROR_RECORD_SECTION_DESCRIPTOR 字段。

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

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

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

驱动程序必须在 WheaCreateHwErrorReportDeviceDriver 创建的每个句柄上调用 WheaHwErrorReportSubmitDeviceDriverWheaHwErrorReportDeviceDriver。 否则, WheaRemoveErrorSourceDeviceDriver 可能会返回STATUS_RESOURCE_IN_USE。