Registrazione per la notifica degli eventi di errore hardware
Per registrarsi per ricevere una notifica sui nuovi eventi di errore hardware, un'applicazione crea una sottoscrizione a tutti gli eventi generati dal canale Microsoft-Windows-Kernel-WHEA/Errors .
Questo canale è consigliato per gli scenari del server. Anche se i dati non sono immediatamente leggibili, è un record di errore common platform (CPER) definito da ACPI/UEFI. In confronto con il provider Microsoft-Windows-WHEA-Logger , questo formato fornisce molto più dettagli sulle specifiche esatte di ogni evento di errore hardware.
Nell'esempio di codice seguente viene illustrato come registrare la notifica di nuovi eventi di errore 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
Tutte le funzioni EvtXxx e i tipi di dati EVT_XXX usati negli esempi precedenti sono documentati nella sezione Registro eventi di Windows nella documentazione di Microsoft Windows SDK.