Partager via


Utilisation de WHEA sur Windows 10

Dans Windows 10, version 2004, l’architecture d’erreur matérielle Windows (WHEA) inclut une nouvelle interface (v2). Cette page explique comment s’inscrire en tant que source d’erreur et signaler des erreurs.

Ajout d’une source d’erreur

Pour vous inscrire auprès de WHEA en tant que source d’erreur à l’aide de WHEA v2, le pilote doit effectuer les opérations suivantes :

  1. Spécifiez une configuration pour votre pilote de périphérique en instanciant une structure de WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER, en fournissant des pointeurs vers des fonctions de rappel d’événements WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER et WHEA_ERROR_SOURCE_UNINITIALIZE_DEVICE_DRIVER.

  2. Appelez WheaAddErrorSourceDeviceDriver, en fournissant la structure de configuration. En règle générale, le pilote appelle cette routine à partir de DriverEntry.

    Pour supprimer une source d’erreur ultérieurement, appelez WheaRemoveErrorSourceDeviceDriver.

  3. WHEA appelle la fonction de rappel d’événement WHEA_ERROR_SOURCE_INITIALIZE_DEVICE_DRIVER du pilote lorsque la source d’erreur est prête à signaler des erreurs. Le pilote reçoit un ErrorSourceId en tant que paramètre pour le rappel.

Signalement d’une erreur

Pour signaler une erreur, procédez comme suit en même temps :

  1. Appelez WheaCreateHwErrorReportDeviceDriver, en fournissant ErrorSourceId et éventuellement un DeviceObject pour le pilote. La routine retourne un handle à l’erreur en cours.

  2. Pour ajouter des données à l’erreur, appelez WheaAddHwErrorReportSectionDeviceDriver, en fournissant le handle d’erreur. Cette fonction ajoute une section unique au rapport d’erreurs et configure une mémoire tampon de données fournie par le pilote. Le pilote peut appeler cette routine jusqu’aux heures MaxSectionsPerReport comme spécifié dans WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER.

    Si vous le souhaitez, le pilote peut appeler WheaHwErrorReportSetSeverityDeviceDriver pour définir la gravité de l’erreur du paquet et des sections. Consultez également WheaHwErrorReportSetSectionNameDeviceDriver, qui est une fonction d’assistance pour la mise à jour du champ FRUText de la structure WHEA_ERROR_RECORD_SECTION_DESCRIPTOR.

  3. Copiez les données d’erreur dans le jeu de mémoires tampons.

  4. Appelez WheaHwErrorReportSubmitDeviceDriver, en fournissant à nouveau le handle d’erreur. Après cet appel, les mémoires tampons des jeux de mémoires tampons ne sont pas disponibles et le handle n’est pas valide.

  5. Si une erreur se produit ou si l’erreur n’est plus valide, le pilote peut éventuellement appeler WheaHwErrorReportAbandonDeviceDriver. Dans ce cas, aucun rapport n’est soumis à WHEA.

Le pilote doit appeler WheaHwErrorReportSubmitDeviceDriver ou WheaHwErrorReportAbandonDeviceDriver sur chaque handle créé par WheaCreateHwErrorReportDeviceDriver. Sinon, WheaRemoveErrorSourceDeviceDriver peut retourner STATUS_RESOURCE_IN_USE.