AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows EventLog mit JEDI auslesen

Ein Thema von ByTheTime · begonnen am 3. Jul 2013 · letzter Beitrag vom 6. Jul 2013
Antwort Antwort
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#1

Windows EventLog mit JEDI auslesen

  Alt 3. Jul 2013, 22:02
Moin,
ich habe es glaube ich auch schonmal in einem anderen Thema angesprochen: Ich arbeite an einem Programm welches das EventLog ausließt. Ich mache es mit der "TJvNTEventLog" Komponente aus der JVCL. Es funktioniert auch teilweiße, jedoch versteh ich etwas nicht.

Mit folgenden Code lese ich das EventLog aus (Natürlich vereinfacht und gekürzt, aber das wesentliche ist dabei):
Delphi-Quellcode:
JvLog.Active := false;
JvLog.Server := 'localhost';
JvLog.Source := 'Security'; // erfordert Admin-Rechte
JvLog.Open;

JvLog.Last;
ShowMessage(IntToStr(JvLog.EventRecord.ID));

JvLog.Close;
Jetzt bekomme ich als Ergebnis die ID 5061. Das ist die ID eines Checks, den Windows alle 5 Minuten macht. Es kann auch sein das man die ID eines anderen Events bekommt, z.B. wenn man die IDE mit Adminrechten startet, erhält man 4672.

Aber das eigentliche Problem ist folgendes. Wenn ich anstatt im Security-Log das System Log auslese, erhalte ich irgendetwas falsches:
Delphi-Quellcode:
JvLog.Active := false;
JvLog.Server := 'localhost';
JvLog.Source := 'System'; // oder "Application"
JvLog.Open;

JvLog.Last;
ShowMessage(IntToStr(JvLog.EventRecord.ID));

JvLog.Close;
Anstatt der ID 7036, erhalte ich 1073748860. Allerdings weiß ich nicht warum. Dasselbe passiert auch im Application-Log. Anstatt die ID des Avira-Eintrags 4120 erhalte ich 1073745944.

Ich verstehe einfach nicht was da schief geht. Wenn jemand die JVCL installiert hat, sowie Zeit und Lust hat, könnte derjenige das ganze vllt. mal bei seinem System ausprobieren? Dann kann ich schonmal ausschließen, das es vllt. etwas mit meinem Rechner zutun hat. Den interessant ist auch, das die Zeit, welche das JvNTEventLog liefert. Diese stimt nicht mit der Zeit unter Verwaltung>Ereignisanzeige überein. Die Zeit welche ich von der Komponente erhalte hängt immer 2h hinterher.

Danke,
Lukas

P.S. Wenn sich jemand erbarmt das ganze mal zu testen, der kann den Code oben einfach übernehmen. Allerdings muss die Abfrage des Security-Logs mit Admin-Rechten laufen.
Lukas
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#2

AW: Windows EventLog mit JEDI auslesen

  Alt 6. Jul 2013, 14:18
Okay, dank der Hilfe von CCRDude bin ich schon einen ganzen Schritt weiter. Ich weiß jetzt, das die Jedi-Komponente die ID aus dem Security Log als normalen Dezimal Integer Wert liefert. Das ist bei dem System und Application Log auch so, allerdings ist sie hier mit einem Flag versehen. Also eine Funktion schreiben, welche die Dezimalzahl in eine Hexadezimalzahl umwandelt, das Flag extrahieren und wieder in eine Dezimalzahl umwandeln. Dann erhält man die reine ID. Weiterführende Schritte wären jetzt, das Flag zu interpretieren und zu verarbeiten und herauszufinden warum das Flag nicht im Security Log auftaucht.

EDIT:
Das Ganze ist doch schwieriger als gedacht. Denn auch innerhalb des selben Logs z.B. des System Logs kann es vorkommen, das IDs auch ohne Flag direkt als saubere Deziemalzahl rüberkommen, in meinem Fall war es die ID 1014. Ich muss jetzt also unterscheiden, was erst umgewandelt werden muss und was nicht.
Lukas

Geändert von ByTheTime ( 6. Jul 2013 um 14:42 Uhr)
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Windows EventLog mit JEDI auslesen

  Alt 6. Jul 2013, 15:17
Und noch mal eine Interessante Entdeckung. Irgendwie werden die Eigenschaften wild durcheinander geworfen. Hier mal ein unsauberer COde, der seinen Zweck aber erfült:

Delphi-Quellcode:
JvLog.Server := 'localhost';
  JvLog.Source := 'Security'; // System, Application
  JvLog.Open;
  JvLog.Last;
  ShowMessage(IntToStr(JvLog.EventRecord.ID) + ' | ' +
    JvLog.EventRecord.EventType + ' | ' + JvLog.EventRecord.Source + ' | ' +
    JvLog.EventRecord.Computer + ' | ' +
    IntToStr(JvLog.EventRecord.RecordNumber) + ' | ' +
    DateTimeToStr(JvLog.EventRecord.DateTime));
Und hier mal im die 3 Ergebnisse.
Security
System
Applicaiton

Irgendwie werden einige Eigenschaften immer verwechselt, vertauscht und irgendwie anders hin und her geworfen. Am Code ist ja zu erkennen das der Reihenfolge nach ID, Event-Typ (Info, Warning, Error), Quelle, Computer, Record-Nummer und Datum angezeigt wird. Allerdings ist der Computername auch mal in Source statt in Computer und manchmal wir der Name auch gekürzt statt "Lukas-PC" nurnoch "s-PC". Woran könnte das denn jetzt liegen
Lukas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz