Partager via


Inscription à la notification d’événements d’erreur matérielle

Pour s’inscrire afin d’être informé des nouveaux événements d’erreur matérielle, une application crée un abonnement à tous les événements déclenchés par le canal Microsoft-Windows-Kernel-WHEA/Errors .

Ce canal est recommandé pour les scénarios de serveur. Bien que les données ne soient pas immédiatement lisibles par l’homme, il s’agit d’un enregistrement CPER (Common Platform Error Record) défini par ACPI/UEFI. Par rapport au fournisseur Microsoft-Windows-WHEA-Logger , ce format fournit beaucoup plus de détails sur les spécificités exactes de chaque événement d’erreur matérielle.

L’exemple de code suivant montre comment s’inscrire à la notification de nouveaux événements d’erreur matérielle.

// 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);
}

Notes

Toutes les fonctions EvtXxx et les types de données EVT_XXX utilisés dans les exemples précédents sont documentés dans la section Journal des événements Windows de la documentation Microsoft Windows SDK.