Partager via


Écriture dans le journal des événements système

Les erreurs sont spécifiées par leur valeur NTSTATUS. Le système prédéfinit des valeurs NTSTATUS particulières qui peuvent être utilisées par les pilotes, et les enregistreurs de pilotes peuvent définir des erreurs supplémentaires. Notez que seules certaines valeurs NTSTATUS peuvent être utilisées lors de la journalisation des erreurs.

Chaque valeur NTSTATUS qui peut être utilisée lors des erreurs de journalisation a un message d’erreur associé. Par exemple, le pilote de port parallèle utilise la valeur NTSTATUS PAR_INTERRUPT_CONFLICT pour représenter les conflits d’interruption matérielle, avec le texte du message « Conflit d’interruption détecté pour %1 ».

Le observateur d'événements affiche le texte du message dans la zone de texte Description de la feuille de propriétés de l’entrée de journal. Si la chaîne de texte du message contient « %1 », le observateur d'événements la remplace par le nom de l’appareil qui a enregistré l’entrée. Le texte du message peut contenir des paramètres supplémentaires de la forme « %2 », « %3 », etc. Lorsque le pilote consigne l’erreur, il peut fournir des valeurs de chaîne pour ces paramètres. Ces valeurs de chaîne sont appelées chaînes d’insertion. Le observateur d'événements les insère automatiquement à la place des valeurs de pourcentage.

Le pilote peut également inclure des données binaires dans l’entrée de journal, appelées données de vidage. Le observateur d'événements affiche les données de vidage dans la zone de texte Données de la feuille de propriétés de l’entrée de journal.

Vous pouvez afficher la feuille de propriétés d’une entrée de journal en double-cliquant sur l’entrée dans le observateur d'événements. La capture d’écran suivante montre un exemple de feuille de propriétés d’entrée de journal.

capture d’écran d’une feuille de propriétés d’événement.

Les pilotes utilisent la routine IoAllocateErrorLogEntry pour allouer une entrée de journal des erreurs. Les entrées de journal se composent d’un en-tête IO_ERROR_LOG_PACKET de longueur variable, suivi de chaînes d’insertion.

Le diagramme suivant montre la disposition d’une entrée de journal d’erreurs en mémoire.

diagramme illustrant une disposition d’un paquet de journal d’erreurs en mémoire .

Le membre ErrorCode de IO_ERROR_LOG_PACKET spécifie la valeur NTSTATUS de l’erreur. Le membre DumpData spécifie toutes les données de vidage pour l’entrée de journal. DumpData est un tableau de taille variable, dont la taille est spécifiée par le membre DumpDataSize . Les pilotes spécifient le début de la première chaîne d’insertion avec le membre StringOffset et le nombre de chaînes dans le membre NumberOfStrings . Chaque chaîne d’insertion elle-même est une chaîne Unicode terminée par null.

Une fois que le pilote a rempli l’entrée du journal des erreurs allouée, il écrit l’entrée dans le journal des erreurs à l’aide de IoWriteErrorLogEntry. IoWriteErrorLogEntry libère automatiquement la mémoire allouée pour l’entrée de journal. Les pilotes peuvent utiliser IoFreeErrorLogEntry pour libérer toutes les entrées de journal inutilisées.

Les codes d’erreur prédéfinis (au format IO_ERR_XXX) sont définis dans le fichier d’en-tête ntiologc.h inclus dans le Kit de pilotes Windows (WDK). Le message d’erreur associé à chaque code d’erreur se trouve dans les commentaires pour ntiologc.h, en regard de la déclaration du code d’erreur. Pour utiliser un code d’erreur prédéfini, le pilote doit inscrire le fichier système, iologmsg.dll, comme source des messages d’erreur associés. Pour plus d’informations, consultez Inscription en tant que source de messages d’erreur.

Les pilotes peuvent également définir leurs propres types d’erreurs personnalisés et les messages d’erreur associés. Pour plus d’informations, consultez Définition de types d’erreurs personnalisés.