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 :
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 : |
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. |
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). |
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é. |
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. |
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. |
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. |
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 : |
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é de 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.
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 :
|
|
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.
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 :
Cet écran montre trois 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é.
L'affichage de cet écran est aussi organisé sous la forme de trois 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 ».
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 (États-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.
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 |
---|---|
Cette fonction sert à ouvrir une clé de la base de registre afin de pouvoir la lire ou la modifier. |
|
Cette fonction sert à énumérer les différentes sous-clés présentes sous une clé de la base de registre. |
|
Cette fonction sert à énumérer les différentes valeurs présentes sous une clé de la base de registre. |
|
Cette fonction sert à fermer la clé de la base de registre ouverte précédemment par RegCreateKeyEx() |
|
Cette fonction sert à ouvrir un fichier EXE ou DLL afin de le charger dans l'espace mémoire du processus courant. |
|
Cette fonction sert à fermer un fichier EXE ou DLL mappé précédemment dans l'espace mémoire du processus courant par LoadLibrary(). |
|
Cette fonction sert à énumérer les différents types des ressources d'un fichier EXE ou DLL. |
|
Cette fonction sert à énumérer les différents noms et identifiants des ressources d'un fichier EXE ou DLL. |
|
Cette fonction sert à énumérer les différents langages des ressources d'un fichier EXE ou DLL. |
|
Cette fonction recherche la position d'une ressource en utilisant le type, le nom et le langage de la ressource recherchée. |
|
Cette fonction récupère un pointeur sur une ressource particulière. |
|
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.