![]() |
OpenEventLog: wie lpSourceName herausfinden?
Ich möchte
![]()
Code:
Im Event Viewer findet sich das Log unter:
HANDLE OpenEventLogA(
[in] LPCSTR lpUNCServerName, [in] LPCSTR lpSourceName ); Event Viewer (Local) > Applications and Services Logs > Microsoft > Windows > Windows Defender > OperationalIn den Log Properties findet sich der "Full Name" des Logs als: Microsoft-Windows-Windows Defender/OperationalAls Source findet sich in den Events: Windows DefenderDie Datei, die das Log beinhaltet, befindet sich in: %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Windows Defender%4Operational.evtxUnd der zugehörige Registry-Eintrag findet sich unter): HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\EventLog\System\WinDefendLaut Doku wäre das passend, denn: Zitat:
Code:
Aus welchem Namen muss ich den Namen des lpSourceName-Parameters herleiten?
// standard names seem to work easily:
NewTabSheet('Application'); NewTabSheet('System'); // these have files with same name, and registry entries with name/name, and work: NewTabSheet('Veeam Agent'); NewTabSheet('Spybot 3'); // failing attempts to access the Windows Defender Log: //NewTabSheet('Microsoft-Windows-Windows Defender/Operational'); //NewTabSheet('Microsoft\Windows\Windows Defender\Operational'); //NewTabSheet('Microsoft-Windows-Windows Defender'); //NewTabSheet('Microsoft\Windows\Windows Defender'); //NewTabSheet('Windows Defender'); //NewTabSheet('WinDefend'); (und wie ist der mit dem Namen in der Registry verknüpft, die brauche ich ja, um die Dateinamen der Message-DLL(s) dazu zu bekommen) Laut Doku wäre es ja WinDefend, aber dabei erhalte ich das übergeordnete "System"-Log, mit keinem einzigen Eintrag, der "passt" (also auch filtern nicht hilfreich). Bin für jeden weiteren Tipp dankbar :) |
AW: OpenEventLog: wie lpSourceName herausfinden?
Hier kommen verschiedene Handle-Werte bei rum:
Delphi-Quellcode:
Ausgabe:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Winapi.Windows; var SourceName: string; SystemEventLogHandle, WinDefendEventLogHandle: THandle; begin try SourceName := 'System'; SystemEventLogHandle := OpenEventLog(nil, @SourceName); Writeln(SourceName, ': ', SystemEventLogHandle.ToHexString); SourceName :='System\WinDefend'; WinDefendEventLogHandle := OpenEventLog(nil, @SourceName); Writeln(SourceName, ': ', WinDefendEventLogHandle.ToHexString); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end.
Code:
System: 006D7370
System\WinDefend: 006D8480 |
AW: OpenEventLog: wie lpSourceName herausfinden?
Das ist egal.
Ob eine Funktion beim Öffnen des "Selben" jeweils eigene Handle liefert, oder das gleiche Handle mit einer Referenzzählung, ist ihr überlassen. Ein unterschiedliches Handle besagt nichts darüber, was drin ist.
Delphi-Quellcode:
System: 005C1880
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Winapi.Windows; var SourceName: string; SystemEventLogHandle, WinDefendEventLogHandle: THandle; begin try SourceName := 'System'; SystemEventLogHandle := OpenEventLog(nil, @SourceName); Writeln(SourceName, ': ', SystemEventLogHandle.ToHexString); SourceName :='System'; WinDefendEventLogHandle := OpenEventLog(nil, @SourceName); Writeln(SourceName, ': ', WinDefendEventLogHandle.ToHexString); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end. System: 005BF928 |
AW: OpenEventLog: wie lpSourceName herausfinden?
Zitat:
Delphi-Quellcode:
SystemEventLogHandle := OpenEventLog(nil, PChar(SourceName));
|
AW: OpenEventLog: wie lpSourceName herausfinden?
Zitat:
Jo, stimmt schon! Hilft aber trotzdem nicht weiter, weil diese Kackschnittstelle einen immer auf 'Application' zurückwirft, wenn sie den Namen nicht auflösen kann. Tolle Wurst!
Delphi-Quellcode:
procedure OpenAndPrintEventLog(const SourceName: string);
var EventLogHandle: THandle; NumberOfRecords: DWORD; RetValue: LongBool; begin EventLogHandle := OpenEventLog(nil, PChar(SourceName)); Writeln(SourceName, ': ', EventLogHandle.ToHexString); NumberOfRecords := 0; RetValue := GetNumberOfEventLogRecords(EventLogHandle, NumberOfRecords); if RetValue then begin Writeln(SourceName, ' has ', NumberOfRecords, ' records'); end else begin Writeln(SourceName, ' has no records'); end; end; begin try OpenAndPrintEventLog('System'); OpenAndPrintEventLog('System\WinDefend'); OpenAndPrintEventLog('Application'); OpenAndPrintEventLog('Security'); OpenAndPrintEventLog('Windows PowerShell'); OpenAndPrintEventLog('Microsoft\Windows\Win32k'); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end. |
AW: OpenEventLog: wie lpSourceName herausfinden?
Zitat:
Das MSDN-Beispiel prüft den "Provider", den ersten String hinter dem jeweiligen Record. Die habe ich mir für System aber alle ausgeben lassen, und WinDefend oder Windows Defender oder Microsoft-Windows-Defender. Schaue ich in die Registry zum Eintrag von WinDefend, finde ich dort noch eine ProviderGuid. Kann die noch involviert sein? Ich teile hier mal meine Reader-Klasse, das ist ein funktionierender Aufruf von OpenEventLog. Zugegeben Lazarus/FreePascal, aber im Delphi-Modus: ![]() (Nachtrag: ![]() |
AW: OpenEventLog: wie lpSourceName herausfinden?
Zitat:
![]() ![]() ![]() |
AW: OpenEventLog: wie lpSourceName herausfinden?
Hmm..
Dir ist bewusst, das OpenEventLog eigentlich nur die Primären LogFiles kann? (Applikation/System..) In den Filtern der Ereignisanzeige von Windows 'Protokoll' genannt. Die Namen findest Du in der Reg unter HKLM\SYSTEM\CurrentControlSet\Services\Eventlog Diese entsprechen (intern) den wohl tatsächlichen LogFiles... Jedes dieser LogFile hat dann Provider, in der Ereignisanzeige 'Quelle' genannt. Mit WMI kannst Du dann auch die Sourcen/Provider selectieren: "SELECT * FROM Win32_NTLogEvent where LogFile='System' and SourceName ='WinDefend' " Optional geht das seit Vista über die neuere (Nachfolger) API 'Windows Events API' (winevt.h). Dort kannst Du dann die Liste der Channels (Protokolle) per 'EvtOpenChannelEnum' / 'EvtNextChannelPath' auslesen, wie auch die separaten Einträge... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz