Ich habe Code, der das Windows-Ereignisprotokoll liest. Es verwendet OpenEventLog, ReadEventLog und ruft die Ereignisquelle und die Ereignis-ID ab. Dann sieht er die Quelle unter derWie liest man das Windows Event Log ohne EventMessageFile?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
Taste nach oben, lädt das entsprechende DLL (n) nach dem, was in EventMessageFile
aufgeführt wird und schließlich verwendet FormatMessage
die Ereigniszeichenfolgen mit dem DLL-Meldungs Inhalt fusionieren das endgültige Ereignis zu bekommen Nachrichtentext. Dies ist der empfohlene Weg, und obwohl ein bisschen Schmerz, funktioniert es großartig.
Bis ... ich gehe die Quelle suchen und finde, dass es keinen EventMessageFile
, sondern einen ProvideGuid
Eintrag hat. Dies scheint der neue Weg zu sein (sie erscheinen auf Vista und Windows 2008). Uggh - nichts Format passieren für den Nachrichtentext suchen und Zusammenführung in den Datenstrings
:(
Suche in der Registrierung für die GUID Verweise auf andere Dateien führt (http.sys im Fall der HTTP-Quelle), aber ich kann nie den vollständigen Nachrichtentext bekommen.Muss ich diese EvtOpenSession
APIs verwenden? Ich hoffe nicht, da ich bereits die EVENTLOGRECORD*
von einem Anruf zu ReadEventLog
habe, und die Tatsache, dass die Software benötigt Wird unter Windows 2003 ausgeführt, wobei EvtOpenSession
nicht unterstützt wird (nur unter Vista und Windows 2008 verfügbar) HINWEIS: Einige Quellen unter Vista haben ProviderGUID und andere haben EventMessageFile, so dass die alte Methode immer noch praktikabel ist
Also was ich nachher bin, ist eine Möglichkeit, die ProviderGuid zu betrachten und die DLL, die an FormatMessage für die Anzeige der vollständigen Ereignisprotokoll Nachricht Text übergeben werden muss.
Vielen Dank für jede Eingabe
Bedeutet das, dass eine App (der Windows Event Log Viewer zum Beispiel), die auf einem Win2003-Rechner läuft, die Ereignisse von einem Vista-Rechner nicht lesen kann das verwendet einen neuen Anbieter? – DougN