Autor Beitrag
Jim_Knopf
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 06.07.06 15:24 
Hallo zusammen! :-)

Ich bin gerade dabei eine Prozedur zu schreiben, die Windows Event Logs ausliest und die Records anschliessend schön aufbereitet in HTML ausgeben soll.
Um die kompletten Messagestrings für jeden Event zu erhalten benötigt man ja diverse Msg-dlls aus dem System32 Ordner.
Nun will ich mit der win-api function FORMAT_MESSAGE die Strings erzeugen.



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
hModule := LoadLibraryEx(MessageFileFN, 0,  LOAD_LIBRARY_AS_DATAFILE);

if hModule <> 0 then

    NumCharsMsg := FormatMessage(

      FORMAT_MESSAGE_ALLOCATE_BUFFER or
      FORMAT_MESSAGE_FROM_HMODULE or
      FORMAT_MESSAGE_ARGUMENT_ARRAY,
      Pointer(hModule),
      EventID,
      0,
      Pchar(@MsgBuf),
      0,
      ArgsBuffer);


Das funktioniert auch solange die EventIds zweistellig sind. Aber alle größeren EventIds (und die meisten sind 4-stellig) liefert mir FormatMessage immer 0 zurück und ei GetLastError bringt Fehler Nummer 317, welcher folgendes bedeutet:

The system cannot find message text for message number 0x%1 in the message file for %2. ERROR_MR_MID_NOT_FOUND


Vielen dank,

Gruss,
Jim Knopf
Jim_Knopf Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 06.07.06 15:52 
Update:


Ich seh gerade dass es nicht an der Anzahl der Stellen der EventIds liegt, sondern an der Source des Events.
Nur die Source "Windows Update Agent" liefert Ergebnisse, alle anderen Sourcen funktionieren nicht.

Der zugehörige EventMessageFile zum Windows Update Agent ist laut Registry C:\WINDOWS\system32\wuaucpl.cpl

Andere EventMessageFiles/Dlls wie z.B. C:\WINDOWS\system32\netevent.dll, C:\WINDOWS\system32\w32time.dll oder c:\windows\System32\spmsg.dll funktionieren nciht..... :-/
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 06.07.06 16:17 
Meines Wissens entsprechen die EventIDs keinen Windows Fehlercode (Sagt ja schon der Name: EventID.), wie in GetLastError liefert. Mit FormatMessage dürfte da nichts zu holen sein. Für EventIDs kenne ich nur diese Seite: www.eventid.net/