1. Introduction

Suite à l'article La journalisation dans le monde Microsoft, découvrez l'API EventLog, je me suis lancé dans la réalisation d'un programme de découverte et d'affichage des différents messages EventLog qui peuvent être générés par les applications enregistrées auprès du sous-système EventLog.

Les caractéristiques de ce programme sont les suivantes :

  • il fonctionne sous environnement Microsoft Windows (au minimum Windows 2000) ;
  • c'est un programme gratuit (freeware) en mode graphique en utilisant la MFC (Microsoft Foundation Class ) ;
  • il affiche les éléments de configuration des différents journaux et sources de messages EventLog ;
  • il affiche les messages EventLog des différentes applications enregistrées auprès du sous-système EventLog.

Ce document présente :

  • un rappel sur le fonctionnement du sous-système EventLog ;
  • la procédure d'installation du programme EventLogDump ;
  • le fonctionnement du programme EventLogDump.

Pour les plus pressés d'entre vous, le programme d'installation se trouve ici : EventLogDump_Setup.

2. Fonctionnement du sous-système EventLog

Le sous-système EventLog définit les notions de "Journal EventLog", de "Source EventLog" et de "Message EventLog".

Le schéma suivant montre l'architecture simplifiée du système :

Architecture simplifiée du sous-système EventLog
Architecture simplifiée du sous-système EventLog

Pour une description plus complète du sous-système EventLog, ne pas hésiter à se reporter au document La journalisation dans le monde Microsoft, découvrez l'API EventLog.

2.1. La notion de journal EventLog

Le sous-système EventLog introduit la notion de journal d'enregistrement. La documentation MSDN utilise le terme anglais localization. Dans un but de clarté, j'utiliserai dans ce document le terme français de journal ou journal d'enregistrement même si la traduction n'est pas parfaite, je trouve que ce terme a plus de sens.

Un journal d'enregistrement est un fichier géré par le sous-système EventLog dans lequel sont stockés les différents messages EventLog générés par les sources de messages qui appartiennent à ce journal.

Les noms des différents journaux gérés par le sous-système EventLog figurent dans la base de registre sous la racine du sous-système EventLog, par exemple :

  • HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\
  • HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security\

Chacun des journaux EventLog définis dans la base de registre contient les informations de configuration suivantes :

Clé de registre Type Description
CustomSD REG_SZ Cette valeur permet de définir l'accès au journal des évènements. La syntaxe utilisée SDDL (Security Descriptor Definition Language). Les droits suivants peuvent être accordés :
* Read (0x0001)
* Write (0x0002)
* Clear (0x0004)
Pour être syntaxiquement valide, la valeur CustomSD doit spécifier un propriétaire et un propriétaire du groupe même si ces propriétaires ne sont pas utilisés car ils n'ont pas de sens dans ce contexte. Si CustomSD contient une valeur incorrecte, un évènement est déclenché dans le journal des évènements système lors du démarrage du service de journalisation des évènements et le journal des évènements reçoit un descripteur de sécurité par défaut identique à la valeur d'origine CustomSD pour le journal Application.
* Windows Server 2003 : les SACLs sont supportées.
* Windows XP/2000 : les SACLs ne sont pas supportées.
DisplayNameFile REG_EXPAND_SZ Cette clé de Registre identifie le fichier contenant la ressource du nom localisé du journal EventLog. Ce fichier est utilisé par le programme "Event Viewer" pour afficher les noms localisés des différents journaux EventLog.
DisplayNameID REG_DWORD Cette clé de registre stocke le numéro de la ressource du nom localisé du journal EventLog.
Ce nombre est utilisé par le programme "Event Viewer" pour afficher le nom localisé du journal EventLog. Cette ressource est stockée dans le fichier spécifié par la valeur de l'entrée DisplayNameFile.
File REG_SZ ou REG_EXPAND_SZ Cette clé de registre spécifie le nom complètement qualifié du fichier EventLog dans lequel les différents messages EventLog de ce journal sont sauvegardés.
MaxSize REG_DWORD Cette clé de registre spécifie la taille maximale du journal EventLog. Cette valeur correspond à l'option Taille maximale du journal sur la page Propriétés affichée par le programme "Event Viewer".
PrimaryModule REG_SZ Cette clé de registre stocke le nom de la source contenant les valeurs par défaut pour les sources qui ne fournissent pas toutes les informations de configuration nécessaires (absence de clé ou mauvaise valeur).
Par exemple, la clé de registre PrimaryModule pour le journal Security indique la source Security. Cela signifie que, pour toutes les sources du journal Security qui ne spécifient pas les valeurs nécessaires de configuration (CategoryCount, CategoryMessageFile, EventMessageFile, ParameterMessageFile, TypesSupported...), ce sont les valeurs stockées dans Security/Security qui seront utilisées.
La clé de registre PrimaryModule permet de spécifier un comportement par défaut pour les sources mal configurées.
Retention REG_DWORD Cette clé de registre spécifie la durée de vie, exprimée en secondes, pendant laquelle les messages EventLog sont protégés d'un éventuel écrasement. Lorsque cette durée de vie est atteinte, le message peut être effacé.
* 0 : le sous-système EventLog écrase les messages uniquement lorsque le journal EventLog atteint la taille maximale (définie par la valeur de l'entrée MAXSIZE). Cette valeur correspond à l'option Remplacer les évènements si nécessaire dans la boîte de dialogue Propriétés d'un journal affichée par le programme "Event Viewer".
* 0x1-0xFFFFFFFE : spécifie la durée de vie minimale des messages EventLog avant un éventuel effacement.
* 0xFFFFFFFF : les messages EventLog ne sont jamais effacés. Lorsque le journal EventLog atteint sa taille maximale (définie par l'entrée MaxSize), il faut alors effacer le fichier manuellement en cliquant sur Effacer tous les évènements. Cette valeur correspond à l'option Ne pas remplacer les évènements dans le programme "Event Viewer". Il est également possible d'activer la fonctionnalité de sécurité qui empêche la machine d'être utilisée si elle ne peut pas ajouter de messages EventLog. Pour activer cette fonctionnalité, il faut définir la valeur de l'entrée CrashOnAuditFail à une valeur différente de 0.
Sources REG_MULTI_SZ Cette clé de registre spécifie les applications, les services ou les groupes d'applications sources qui peuvent générer des messages EventLog dans ce journal. Chaque source répertoriée par cette entrée est aussi représentée par une sous-clé de registre.
Il semble que la cohérence entre le contenu de cette clé et les différents sous-répertoires représentant les sources ne soit pas nécessaire.
AutoBackupLogFiles REG_DWORD L'utilisation de cette clé de registre indique au sous-système EventLog de sauvegarder automatiquement les journaux EventLog avant de les effacer. Sur les machines avec l'option CrashOnAuditFail activée, le système continue à enregistrer des évènements (au lieu de s'arrêter à cause d'une défaillance de l'audit) si le journal EventLog peut être sauvegardé automatiquement.
RestrictGuestAccess REG_DWORD Les messages EventLog pouvant contenir des informations sensibles, cette clé de registre permet de restreindre l'accès des journaux aux administrateurs et aux comptes système.
* 0 : l'accès aux journaux est autorisé pour tous les utilisateurs.
* 1 : l'accès aux journaux est restreint aux administrateurs et aux comptes système.
Isolation REG_SZ Cette clé de registre définit les autorisations d'accès par défaut pour le journal.

2.2. La notion de source EventLog

Toutes les sources EventLog pour un journal particulier sont listées dans la base de registre sous la clé HKLM\SYSTEM\CurrentControlSet\Services\EventLog\<journal>\<source>, par exemple :

  • HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\.NET Runtime\ ;
  • HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security\SC Manager\ ;
  • HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System\acpi\.

Chacune des sources EventLog définies dans la base de registre contient les informations de configuration suivantes :

Clé de registre Type Description
CategoryCount REG_DWORD Nombre de catégories utilisées par cette source de messages EventLog.
Le rôle et l'usage exact de cette clé ne sont pas connus. Si vous avez plus d'informations au sujet de cette clé, n'hésitez pas, 19 commentaires, ce document sera mis à jour.
CategoryMessageFile REG_SZ ou REG_EXPAND_SZ Chemin d'accès au fichier des différentes catégories EventLog définies pour cette source. Ce fichier contient les catégories localisées pour cette source. Il est possible d'indiquer plusieurs fichiers, séparés par des points virgules (";").
EventMessageFile REG_SZ ou REG_EXPAND_SZ Chemin d'accès au fichier des différents messages EventLog définis pour cette source. Ce fichier contient les messages localisés pour cette source. Il est possible d'indiquer plusieurs fichiers, séparés par des points virgules (";").
ParameterMessageFile REG_SZ ou REG_EXPAND_SZ Chemin d'accès au fichier des différents paramètres EventLog définis pour cette source. Ce fichier contient les paramètres statiques de cette source exprimés dans un langage neutre. Ces paramètres seront ajoutés dans le message EventLog. Il est possible d'indiquer plusieurs fichiers, séparés par des points virgules (";").
TypesSupported REG_DWORD Cette valeur spécifie le masque des types de messages EventLog supportés par cette source. Ce masque est construit (par un ou logique) avec les valeurs suivantes :
* EVENTLOG_ERROR_TYPE (0x01)
* EVENTLOG_WARNING_TYPE (0x02)
* EVENTLOG_INFORMATION_TYPE (0x04)
* EVENTLOG_AUDIT_SUCCESS (0x08)
* EVENTLOG_AUDIT_FAILURE (0x10)
Le rôle et l'usage exact de cette clé ne sont pas connus car même en mettant une valeur 0, tous les types de messages sont supportés. Si vous avez plus d'informations au sujet de cette clé, n'hésitez pas, 19 commentaires, ce document sera mis à jour.
ProviderGuid REG_SZ ou REG_EXPAND_SZ Cette clé est souvent renseignée par certaines sources et contient comme valeur un Guid. Le rôle exact de cette clé est inconnu. Si vous avez plus d'informations au sujet de cette clé, n'hésitez pas, 19 commentaires, ce document sera mis à jour.
publisherGuid REG_EXPAND_SZ Cette clé est parfois renseignée par certaines sources. Le rôle exact de cette clé est inconnu. Si vous avez plus d'informations au sujet de cette clé, n'hésitez pas, 19 commentaires, ce document sera mis à jour.
LoggingLevel REG_DWORD Cette clé est parfois renseignée par certaines sources. Le rôle exact de cette clé est inconnu. Si vous avez plus d'informations au sujet de cette clé, n'hésitez pas, 19 commentaires, ce document sera mis à jour.
Version REG_DWORD Cette clé est parfois renseignée par certaines sources. Le rôle exact de cette clé est inconnu. Si vous avez plus d'informations au sujet de cette clé, n'hésitez pas, 19 commentaires, ce document sera mis à jour.

2.3. La notion de message EventLog

Un message EventLog, tel qu'affiché par le programme "Event Viewer", est constitué des parties suivantes :

  • un identifiant de message. Cet identifiant est un nombre sur 32 bits qui permet de chercher le format d'affichage localisé (comprendre, dans la langue de l'utilisateur ou du système) du message EventLog. Le ou les fichiers contenant ces messages sont indiqués par la clé de registre EventMessageFile ;
  • une catégorie de message. Cette catégorie est aussi un identifiant qui permet de chercher le nom localisé nde cette catégorie. Le ou les fichiers contenant ces catégories sont indiqués par la clé de registre CategoryMessageFile ;
  • des paramètres statiques. Ces paramètres sont écrits dans une langue neutre et n'ont pas vocation à être localisés. Le ou les fichiers contenant ces paramètres statiques sont indiqués par la clé de registre ParameterMessageFile.

3. Installation de EventLogDump

Ce paragraphe présente :

  • la licence d'utilisation du programme EventLogDump ;
  • l'historique des versions du programme ;
  • les plates-formes supportées ;
  • la procédure d'installation en détail.

3.1. Licence du logiciel EventLogDump

Sauf mention contraire, la documentation et les binaires inclus dans le logiciel d'installation de EventLogDump sont protégés par Phoenix Team.

Copyright © 2007-2010 Phoenix Team. Tous droits réservés.

Ce logiciel est fourni "en l'état", sans aucune garantie ni implicite ni explicite. En aucune manière, les auteurs ne pourraient être tenus pour responsables des dommages causés par l'usage de ce logiciel.

Tout le monde a la permission d'utiliser ce logiciel pour quelque usage que ce soit, même commercial, de le modifier et de le redistribuer pourvu que les conditions suivantes soient remplies :

  • toute redistribution des codes sources doit conserver, sans modification, la mention de copyright présente ;
  • toute redistribution sous forme binaire doit conserver, sans modification, la mention de copyright actuelle ainsi que les adresses de sites web déjà en place (dans la boîte de dialogue "À propos de...", par exemple) ;
  • l'origine de ce logiciel ne doit pas être cachée ; vous ne pouvez pas dire que vous avez écrit ce logiciel. Si vous utilisez ce logiciel pour distribuer un produit, un remerciement dans la documentation du produit serait apprécié mais n'est pas obligatoire ;
  • toute version modifiée des sources ou des binaires doit être clairement identifiée et ne doit pas être présentée comme étant le logiciel original.

Phoenix Team

3.2. Historique des versions

3.2.1. Version 1.0 (6 février 2010)

Nouvelles fonctionnalités

  • C'est la première version donc tout est nouveau.

Problèmes corrigés

  • Il n'y a pas encore de problèmes identifiés.

3.3. Plates-formes supportées

3.3.1. Version minimum d'OS

Le programme EventLogDump peut fonctionner à partir de la version Microsoft Windows 2000. Il utilise les informations issues du document La journalisation dans le monde Microsoft, découvrez l'API EventLog.

3.3.2. Plates-formes supportées

Le programme EventLogDump a été testé avec succès sur les plates-formes suivantes :

  • Windows Seven Professional 64 bits (sur une architecture 64 bits)

Si d'autres architectures sont supportées, n'hésitez pas à l'indiquer dans le post dédié à ce document : Commentez. Ce document sera alors complété.

3.3.3. Plates-formes non supportées

Le programme EventLogDump ne fonctionne pas sur les plates-formes suivantes :

  • Windows 98 SE

Si d'autres architectures ne sont pas supportées, n'hésitez pas à l'indiquer dans le post dédié à ce document : Commentez. Ce document sera alors complété.

3.4. Procédure d'installation

Le programme d'installation (setup) peut être téléchargé ici.

Ce setup se charge d'installer le programme et éventuellement le "Package redistribuable Microsoft Visual C++ 2005 (x86)".

Le setup est réalisé avec le compilateur de setup Innosetup.

Le déroulement de l'installation passe par les étapes suivantes :

Choix de la langue
Choix de la langue (français ou anglais)
Installation du Package redistribuable Microsoft Visual C++ 2005 (x86)
Installation du Package redistribuable Microsoft Visual C++ 2005 (x86) (si nécessaire)
Ecran de bienvenue
Ecran de bienvenue
Affichage de la licence
Affichage de la licence
Choix du répertoire d'installation
Choix du répertoire d'installation
Ajout dans le menu Démarrer
Ajout dans le menu Démarrer (option facultative)
Création d'une icône sur le bureau
Création d'une icône sur le bureau (option facultative)
Récapitulatif des actions qui vont être faites
Récapitulatif des actions qui vont être faites
Affichage de l'historique des versions du logiciel
Affichage de l'historique des versions du logiciel
Fin de l'installation du logiciel
Fin de l'installation du logiciel



La procédure d'installation va créer dans le menu Démarrer les entrées suivantes :

  • Phoenix Team / EventLogDump / EventLogDump : un lien pour lancer l'exécutable ;
  • Phoenix Team / EventLogDump / Uninstall : un lien pour désinstaller le programme ;
  • Phoenix Team / EventLogDump / Documentation : un lien vers cette page WWW ;
  • Phoenix Team / EventLogDump / Phoenix Team WWW site : un lien vers le site de l'auteur.

La procédure d'installation va aussi créer une entrée dans le gestionnaire des logiciels installés afin de permettre la désinstallation du logiciel EventLogDump de manière propre.

Le gestionnaire des logiciels installés
Le gestionnaire des logiciels installés

4. Fonctionnement du programme

Ce paragraphe détaille les points suivants :

  • l'écran d'affichage des différents journaux EventLog ;
  • l'écran d'affichage des différentes sources EventLog ;
  • l'écran d'affichage des différents messages EventLog.

4.1. La liste des journaux EventLog

Au lancement du programme EventLogDump, l'écran suivant s'affiche. Il montre la liste des différents journaux EventLog :

Liste des journaux EventLog
Liste des journaux EventLog

Cet écran montre 3 listes :

  • la liste des journaux EventLog. L'information affichée est directement issue de la base de registre par lecture de la clé HKLM\SYSTEM\CurrentControlSet\Services\EventLog\ ;
  • les propriétés du journal EventLog sélectionné. Les informations affichées sont directement issues de la base de registre ;
  • la liste des erreurs pour le journal EventLog sélectionné. Cette liste montre les erreurs et incohérences entre les propriétés lues dans la base de registre et les explications données principalement par le MSDN pour le journal EventLog sélectionné.

Après avoir sélectionné un journal EventLog, il suffit d'appuyer sur le bouton "Suivant >" pour passer à l'écran suivant de visualisation des sources EventLog pour ce journal.

4.2. La liste des sources EventLog

Après avoir sélectionné un journal EventLog et cliqué sur le bouton "Suivant >", cet écran s'affiche. Il montre la liste des sources EventLog pour le journal précédemment sélectionné.

Liste des sources Eventlog
Liste des sources Eventlog

L'affichage de cet écran est aussi organisé sous la forme de 3 listes :

  • la liste des sources EventLog pour le journal sélectionné. L'information affichée est directement issue de la base de registre par lecture de la clé HKLM\SYSTEM\CurrentControlSet\Services\EventLog\<journal> ;
  • les propriétés la source EventLog sélectionnée. Les informations affichées sont directement issues de la base de registre ;
  • la liste des erreurs pour la source EventLog sélectionnée. Cette liste montre les erreurs et incohérences entre les propriétés lues dans la base de registre et les explications données principalement par le MSDN pour la source EventLog sélectionnée.

Après avoir sélectionné une source EventLog, il suffit d'appuyer sur un des boutons "Catégories", "Messages" ou "Paramètres" pour afficher les messages contenus dans ces fichiers. Si un de ces boutons n'est pas actif, cela signifie que ce paramètre n'est pas défini dans la base de registre ou bien que le fichier indiqué n'existe pas.

4.3. La liste des messages EventLog

Après avoir sélectionné un fichier EventLog en cliquant sur un des boutons "Catégories", "Messages" ou "Paramètres", cet écran s'affiche. Il montre la liste des messages EventLog pour le fichier précédemment sélectionné. Les messages sont des ressources particulières sous forme de chaînes de caractères du type "RT_MESSAGETABLE".

Liste des messages EventLog
Liste des messages EventLog

Les informations affichées sont les suivantes :

  • la colonne # : indique le numéro de message ;
  • la colonne Language : indique la langue utilisée pour le message. Elle affiche l'identifiant du message (0x0409) ainsi que son nom (Anglais (Etats-Unis)) ;
  • la colonne Identifier : indique la valeur de l'identifiant du message sous la forme d'un nombre hexadécimal ;
  • la colonne Sev : indique la sévérité du message. Il s'agit de l'interprétation des 2 bits 31 et 30 de l'identifiant du message ;
  • la colonne C : indique l'état du bit 29 Customer bit de l'identifiant du message ;
  • la colonne R : indique l'état du bit 28 Reserved bit de l'identifiant du message ;
  • la colonne Facility : indique la valeur décodée (si possible) des bits 27 à 16 Facility bit de l'identifiant du message ;
  • la colonne Code : indique la valeur des bits 15 à 0 de l'identifiant du message ;
  • la colonne Message : montre la chaîne de caractères du message.

4.4. Plus d'informations

En cliquant sur le bouton Aide, les informations de version du logiciel EventLogDump sont affichées.

Informations au sujet de EventLogDump
Informations au sujet de EventLogDump

4.5. Appels à l'API Win32 utilisés

Les appels à l'API Win32 utilisés pour réaliser ce programme sont les suivants :

Appel Description
RegCreateKeyEx() Cette fonction sert à ouvrir une clé de la base de registre afin de pouvoir la lire ou la modifier.
RegEnumKeyEx() Cette fonction sert à énumérer les différentes sous-clés présentes sous une clé de la base de registre.
RegEnumValue() Cette fonction sert à énumérer les différentes valeurs présentes sous une clé de la base de registre.
RegCloseKey() Cette fonction sert à fermer la clé de la base de registre ouverte précédemment par RegCreateKeyEx()
LoadLibrary() Cette fonction sert à ouvrir un fichier EXE ou DLL afin de le charger dans l'espace mémoire du processus courant.
FreeLibrary() Cette fonction sert à fermer un fichier EXE ou DLL mappé précédemment dans l'espace mémoire du processus courant par LoadLibrary().
EnumResourceTypes() Cette fonction sert à énumérer les différents types des ressources d'un fichier EXE ou DLL.
EnumResourceNames() Cette fonction sert à énumérer les différents noms et identifiants des ressources d'un fichier EXE ou DLL.
EnumResourceLanguages() Cette fonction sert à énumérer les différents langages des ressources d'un fichier EXE ou DLL.
FindResourceEx() Cette fonction recherche la position d'une ressource en utilisant le type, le nom et le langage de la ressource recherchée.
LoadResource() Cette fonction récupère un pointeur sur une ressource particulière.
LockResource() Cette fonction construit un pointeur sur les ressources obtenues par la fonction LoadResource() dans l'espace mémoire du processus courant.

5. Conclusion

Le programme EventLogDump a été réalisé en quelques jours. Il exploite complètement les informations issues du document La journalisation dans le monde Microsoft, découvrez l'API EventLog.

La réalisation de ce programme a également fait apparaître quelques surprises :

  • la première surprise est un constat : le MSDN est en fait relativement peu précis et directif en ce qui concerne la présence ou non de clés dans la base de registre, de leurs types et de leurs valeurs ;
  • la seconde surprise (et probablement une conséquence de la remarque précédente) est que l'on trouve beaucoup de petites incohérences et erreurs dans la base de registre concernant les différentes propriétés du sous-système EventLog ;
  • et enfin, la dernière concerne l'utilisation des messages EventLog. En regardant certains de ceux-ci (messages dont le texte est "%1" par exemple), il est facile de voir que leurs concepteurs n'ont pas entièrement compris la bonne manière d'utiliser le sous-système EventLog.

N'hésitez pas à aller sur la page WWW de EventLogDump pour voir si de nouvelles versions sont disponibles et n'hésitez pas non plus à laisser un avis ou une remarque au sujet de ce programme sur le post dédié à cet effet : Commentez. Ce document évoluera aussi en fonction de vos remarques.

Je tiens à remercier jacques_jean et hornetbzz pour leurs conseils avisés lors de la relecture de ce tutoriel.