Registro para la notificación de eventos de error de hardware
Para registrarse para recibir notificaciones sobre los nuevos eventos de error de hardware, una aplicación crea una suscripción a todos los eventos generados por el canal Microsoft-Windows-Kernel-WHEA/Errors .
Este canal se recomienda para escenarios de servidor. Aunque los datos no son legibles inmediatamente, es un registro de errores común ( CPER) definido por ACPI/UEFI. En comparación con el proveedor Microsoft-Windows-WHEA-Logger , este formato proporciona mucho más detalles sobre los detalles exactos de cada evento de error de hardware.
En el ejemplo de código siguiente se muestra cómo registrarse para la notificación de nuevos eventos de error de hardware.
// Prototype for the notification callback function
DWORD WINAPI HwErrorEventCallback(
EVT_SUBSCRIBE_NOTIFY_ACTION Action,
PVOID Context,
EVT_HANDLE EventHandle
);
// Function to create a subscription to all hardware error
// events that are raised by the WHEA provider.
EVT_HANDLE SubscribeHwErrorEvents(VOID)
{
EVT_HANDLE SubHandle;
// Create a subscription to all events that are sent
// to the WHEA channel.
#if (WINVER <= _WIN32_WINNT_LONGHORN)
SubHandle =
EvtSubscribe(
NULL,
NULL,
L"Microsoft-Windows-Kernel-WHEA",
L"*",
NULL,
NULL,
HwErrorEventCallback,
EvtSubscribeToFutureEvents
);
#else
SubHandle =
EvtSubscribe(
NULL,
NULL,
L" Microsoft-Windows-Kernel-WHEA/Errors",
L"*",
NULL,
NULL,
HwErrorEventCallback,
EvtSubscribeToFutureEvents
);
#endif
// Return the subscription handle
return SubHandle;
}
// Notification callback function
DWORD WINAPI HwErrorEventCallback(
EVT_SUBSCRIBE_NOTIFY_ACTION Action,
PVOID Context,
EVT_HANDLE EventHandle
)
{
// Check the action
if (Action == EvtSubscribeActionDeliver) {
// Process the hardware error event
ProcessHwErrorEvent(EventHandle);
}
// Return success status
return ERROR_SUCCESS;
}
// Function to terminate the subscription
VOID UnsubscribeHwErrorEvents(EVT_HANDLE SubHandle)
{
// Close the subscription handle
EvtClose(SubHandle);
}
Nota:
Todas las funciones EvtXxx y los tipos de datos EVT_XXX que se usaron en los ejemplos anteriores se documentan en la sección Registro de eventos de Windows en la documentación de Microsoft Windows SDK.