Question

J'ai un code qui lit le journal des événements Windows. Il utilise OpenEventLog, ReadEventLog et obtient la source et l'ID d'événement. Ensuite, il recherche la source sous la

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

, charge les DLL appropriées en fonction de ce qui est répertorié dans EventMessageFile et utilise finalement FormatMessage pour fusionner les chaînes d'événement avec le contenu du message DLL pour obtenir le résultat. texte du message d'événement final. C’est la méthode recommandée et, même si elle est un peu pénible, elle fonctionne très bien.

Jusqu'à ce que ... je cherche la source et trouve qu'elle n'a pas de EventMessageFile , mais plutôt une entrée ProvideGuid . Cela semble être le nouveau moyen (ils apparaissent sur Vista et Windows 2008). Uggh - rien à transmettre à FormatMessage pour rechercher le texte du message et le fusionner dans les chaînes de données

: (

La recherche de GUID dans le registre conduit à des références à d'autres fichiers (http.sys dans le cas de la source HTTP), mais je ne peux jamais obtenir le texte complet du message. Dois-je utiliser ces API EvtOpenSession ? J'espère que je n'ai pas déjà le EVENTLOGRECORD * d'un appel à ReadEventLog , et le fait que le logiciel doit être exécuté sur Windows 2003 où EvtOpenSession n'est pas pris en charge (disponible uniquement sur Vista et Windows 2008). REMARQUE: Certaines sources de Vista ont ProviderGUID et d’autres EventMessageFile. L’ancienne méthode est donc toujours viable.

Donc, ce que je recherche, c'est un moyen de consulter ProviderGuid et d'obtenir la DLL à transmettre à FormatMessage pour afficher le texte complet du message du journal des événements.

Merci pour votre contribution

Était-ce utile?

La solution

Les API auxquelles Richard fait référence sont destinées au nouveau style Eventing System (nommé Crimson, parfois appelé fournisseurs basés sur le manifeste) introduit dans Vista / Server 2K8. Parmi les artefacts de ce nouveau système, citons les nouvelles API qui consomment ces journaux, la clé ProviderGuid pour certaines EventSources produisant des événements à l'aide de ce nouveau cadre.

Je pense que vous devriez utiliser les fonctions de Windows Vista plus tard pour utiliser ces journaux, cela devrait gérer le travail pour vous. Vous pouvez utiliser la méthode EvtFormatMessage pour formater les chaînes. Je crois que ces API liront également les événements produits par "Classic". fournisseurs.

Si vous utilisez ces messages depuis une application .NET, vous pouvez utiliser des types dans l'espace de noms System.Diagnostics.Eventing.Reader, introduit dans .NET 3.5.

Autres conseils

Il existe des API Win32 pour lire / développer les entrées du journal des événements.

Voir MSDN: http://msdn.microsoft .com / fr-us / library / aa385780 (VS.85) .aspx

N'importe quoi d'autre et vous risquez de rencontrer des problèmes avec les correctifs, sans parler des Service Packs ou des nouvelles versions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top