Uso de WHEA en Windows 10

En Windows 10, versión 2004, Arquitectura de errores de hardware de Windows (WHEA) incluye una nueva interfaz (v2). En esta página se describe cómo registrarse como un origen de error y notificar errores.

Adición de un origen de error

Para registrarse con WHEA como origen de error mediante WHEA v2, el controlador debe hacer lo siguiente:

  1. Especifique una configuración para el controlador de dispositivo mediante la creación de instancias de una estructura de WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER, lo que proporciona punteros a WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER y WHEA_ERROR_SOURCE_UNINITIALIZE_DEVICE_DRIVER funciones de devolución de llamada de eventos.

  2. Llame a WheaAddErrorSourceDeviceDriver y proporcione la estructura de configuración. Normalmente, el controlador llama a esta rutina desde DriverEntry.

    Para quitar un origen de error más adelante, llame a WheaRemoveErrorSourceDeviceDriver.

  3. WHEA llama a la función de devolución de llamada de evento WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER del controlador cuando el origen del error está listo para notificar errores. El controlador recibe un ErrorSourceId como parámetro para la devolución de llamada.

Notificar un error

Para notificar un error, realice los pasos siguientes en secuencia al mismo tiempo:

  1. Llame a WheaCreateHwErrorReportDeviceDriver, proporcionando ErrorSourceId y, opcionalmente, un DeviceObject para el controlador. La rutina devuelve un identificador al error en curso.

  2. Para agregar datos al error, llame a WheaAddHwErrorReportSectionDeviceDriver, proporcionando el identificador de error. Esta función agrega una sola sección al informe de errores y configura un búfer de datos proporcionado por el controlador. El controlador puede llamar a esta rutina hasta maxSectionsPerReport veces, tal como se especifica en WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER.

    Opcionalmente, el controlador puede llamar a WheaHwErrorReportSetSeverityDeviceDriver para establecer la gravedad del error del paquete y las secciones. Vea también WheaHwErrorReportSetSectionNameDeviceDriver, que es una función auxiliar para actualizar el campo FRUText de la estructura WHEA_ERROR_RECORD_SECTION_DESCRIPTOR.

  3. Copie los datos de error en el conjunto de búferes.

  4. Llame a WheaHwErrorReportSubmitDeviceDriver y vuelva a proporcionar el identificador de error. Después de esta llamada, los búferes de los conjuntos de búferes no están disponibles y el identificador no es válido.

  5. Si se produce un error o el error ya no es válido, el controlador puede llamar opcionalmente a WheaHwErrorReportAbandonDeviceDriver. En este caso, no se envía ningún informe a WHEA.

El controlador debe llamar a WheaHwErrorReportSubmitDeviceDriver o WheaHwErrorReportAbandonDeviceDriver en cada identificador creado por WheaCreateHwErrorReportDeviceDriver. De lo contrario, WheaRemoveErrorSourceDeviceDriver podría devolver STATUS_RESOURCE_IN_USE.