Condividi tramite


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.