Поделиться через


Использование WHEA в Windows 10

В Windows 10 версии 2004 архитектура аппаратных ошибок Windows (WHEA) включает новый интерфейс (версия 2). На этой странице описывается, как зарегистрировать в качестве источника ошибок и сообщить об ошибках.

Добавление источника ошибок

Чтобы зарегистрировать в WHEA в качестве источника ошибок с помощью WHEA версии 2, драйвер должен выполнить следующее:

  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 вызывает функцию обратного вызова события драйвера WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER , когда источник ошибок готов сообщать об ошибках. Драйвер получает ErrorSourceId в качестве параметра обратного вызова.

Создание отчетов об ошибке

Чтобы сообщить об ошибке, выполните следующие действия в последовательности одновременно:

  1. Вызовите WheaCreateHwErrorReportDeviceDriver, указав ErrorSourceId и, при необходимости, DeviceObject для драйвера. Подпрограмма возвращает дескриптор в ошибке хода выполнения.

  2. Чтобы добавить данные в ошибку, вызовите WheaAddHwErrorReportSectionDeviceDriver, указав дескриптор ошибки. Эта функция добавляет один раздел в отчет об ошибке и настраивает буфер данных, предоставленный драйвером. Драйвер может вызывать эту подпрограмму до maxSectionsPerReport, как указано в WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER.

    При необходимости драйвер может вызвать WheaHwErrorReportSetSeverityDeviceDriver , чтобы задать серьезность ошибок пакета и разделов. Также см. раздел WheaHwErrorReportSetSectionNameDeviceDriver, который является вспомогательной функцией для обновления поля FRUText структуры WHEA_ERROR_RECORD_SECTION_DESCRIPTOR.

  3. Скопируйте данные об ошибках в буферный набор.

  4. Вызовите WheaHwErrorReportSubmitDeviceDriver, снова предоставив дескриптор ошибки. После этого вызова буферы в буферных наборах недоступны, а дескриптор недопустим.

  5. Если произошла ошибка или ошибка больше не действительна, драйвер может при необходимости вызвать WheaHwErrorReportAbandonDeviceDriver. В этом случае отчет не отправляется в WHEA.

Драйвер должен вызвать WheaHwErrorReportSubmitDeviceDriver или WheaHwErrorReportAbandonDeviceDriver на каждом дескрипторе, созданном WheaCreateHwErrorReportDeviceDriverr. В противном случае WheaRemoveErrorSourceDeviceDriver может вернуть STATUS_RESOURCE_IN_USE.