ID d'événement ne correspondent pas à ce qui est affiché dans l'Observateur d'événements
-
28-09-2019 - |
Question
Dans le journal des événements système est un événement avec les détails suivants:
Source: Kernel-General
Event ID: 1
Details: The system time has changed to 2010-07-17T02:58:20.285000000Z from 2010-07-17T02:58:20.285868600Z.
Le EVENTLOGRECORD a également un 1 pour le champ EventID, il correspond à ce que nous voyons dans la visionneuse du journal des événements.
Jusqu'à présent, si bon.
Le problème est, quand vous regardez dans advapi32.dll qui est où cette source reçoit des messages de partir, vous voyez ceci:
ID:01000001
String: The system time has changed to %1 from %2.
Comment le journal des événements Viewer sait par magie ajouter ces bits supplémentaires à l'ID pour trouver la chaîne de droite? Pas toutes les chaînes d'événements ont que peu supérieur, et certains ont d'autres bits supérieurs définis.
Appel FormatMessage avec 1 échoue. Appellant avec x01000001 réussit. Mais ce n'est pas ce que l'enregistrement du journal des événements contient ...: (
Aucun docs que je peux trouver en discuter du tout (autre que décrivant le format d'ID qui indique l'erreur / gravité / installation / bits de code).
La solution
Comme vous, je ne le trouve pas documenté nulle part, mais il semble que des cartes Event Viewer membre de EventType
de la structure EVENTLOGRECORD
à Gravité bits de l'identifiant de la table de message.
Ainsi, par exemple, un événement Service Control Manager 7035 est de type « Information », qui associe à Gravité valeur 1, ce qui donne un ID de message de 0x40001B7B, ce qui est bien le texte que l'Observateur d'événements affiche de netevent.dll: Le service% 1 a été envoyé avec succès% 2 contrôle
.De même, l'événement 7000 est de type "erreur", la cartographie à Gravité 3 et un ID de message de 0xC0001B58: Le service% 1 n'a pas pu démarrer en raison de l'erreur suivante:% n % 2
Bien sûr, cela ne correspond pas tout à fait avec votre exemple; vous que vous avez votre 0 et de 1 dans le bon endroit?
Autres conseils
Soi-disant, dans Windows XP et plus tôt l'ID de l'événement a été directement mis en correspondance avec l'ID de message dans la table des messages. Avec Vista et plus tard, il y a deux façons que l'ID d'événement peut être associé à l'ID de message.
- Qualifiers événement (ce qui est probablement ce qui ressemble à la gravité étant masqué comme Brian initialement mentionné)
- Modèle de Windows événement ressource
Cet article décrit les deux façons plus en détail: https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20 (EVTX) .asciidoc # message chaîne identificateur
Ce « Le temps du système a changé ... » événement en particulier, Windows 10 utilise le modèle de l'événement de ressources Windows. Si vous lookup la clé EventMessageFile, dans le registre, pour cet événement (en fonction de la source d'événement = Microsoft Windows Kernel-général), vous trouvez la DLL du fournisseur.
Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ System \ Microsoft-Windows Kernel général
Vous pouvez alors utiliser l'événement Windows utilitaire pour regarder le contenu de la dll fournisseur (en ajoutant la / g: true drapeau affiche le texte du message):
wevtutil gp Microsoft Windows Kernel-général / ge: true
Les spectacles de sortie qui Event ID 1 avec un groupe de 5 l'événement a un ID de message = 16777217 (0x01000001).