Dateiformat: Cursor
Der Cursor markiert das logische Ende einer Eventlog-Datei. Dass dies nicht unbedingt auch das physische Ende sein muss, irritiert zahlreiche Programme. Wer deshalb ein Log von Hand mit dem Hexeditor auswerten muss, wird den Cursor doppelt zu schätzen wissen: seine auffällige Magic ist nicht zu übersehen und im Gegensatz zum Header sind die Daten auch immer aktuell.
Auch die Struktur des Cursors ist nicht dokumentiert. Nachdem aber das Format des Headers bekannt ist, lassen sich auch die Felder des Cursors schnell enträtseln:
| Lfd. Nr. | Offset | Länge | Bedeutung |
|---|---|---|---|
| 1 | 0x00 | 4 | Länge, stets 0x28 |
| 2 | 0x04 | 16 | Magic, s.u. |
| 3 | 0x14 | 4 | Offset des ersten Eintrags |
| 4 | 0x18 | 4 | Offset des nächsten Eintrags (= Position des Cursors) |
| 5 | 0x1c | 4 | Nummer des nächsten Eintrags |
| 6 | 0x20 | 4 | Nummer des ersten Eintrags |
| 1 | 0x24 | 4 | Länge, stets 0x28 |
Als Magic dient die 16 Bytes lange Zeichenfolge 0x1111 0x1111 0x2222 0x2222 0x3333 0x3333 0x4444 0x4444. Sie eignet sich auch gut zur Suche nach Eventlog-Fragmenten. False positives gibt es auch hier in der eventlog.dll.
Hat das Log noch nicht seine Maximallänge erreicht, so markiert der Cursor gleichzeitig das logische und das physische das Ende der Datei.
Hat das Log seine Maximallänge bereits erreicht, dann werden die ältesten Datesätze überschrieben. Der Cursor ist dann inmitten von Ereignis-Einträgen zu finden. Unmittelbar vor ihm befindet sich der jüngste (d.h. letzte) Ereignis-Eintrag. Hinter dem Cursor findet man eventuell das Ende eines überschriebenen Eintrags, gefolgt vom ältesten vollständig erhaltenen Ereignis-Eintrag.
Während der Header nur beim Herunterfahren des Eventlog-Dienstes aktualisiert werden, enthält der Cursor stets aktuelle Daten.
Noch ein paar Worte zur Nomenklatur. In meiner ersten Analyse des Dateiformats hatte ich den Datensatz als Cursor bezeichnet, weil er mich an die Schreibmarke in einer Textverarbeitung o.ä. erinnerte. Erst später sah ich in den Debug-Meldungen einer checked build von Windows 2000, dass Microsoft den Datensatz End of File Record nennt. Im Hinblick auf die physische Struktur finde ich diese Bezeichnung jedoch irritierend, so dass ich beim Cursor bleibe.