this slowpoke moves

EventLog Read & Clear

Das Ereignisprotokoll eingesehen oder mit der EventLog-Klasse programmatisch angesteuert werden. Die Dateien werden von einem Systemdienst verwaltet, den der Prozess Services aus der Dynamic Link Library Eventlog lädt.

Zu den protokollierten Ereignissen können beispielsweise fehlgeschlagene Anmeldeversuche, Statusänderungen der Netzwerkverbindungen, Warnungsmeldungen über die Systemsicherheit und Fehler bei der Einrichtung von Treibern oder beim Starten von Diensten gehören. Zu jedem Ereignis werden die Art des Ereignisses, die Ereignisquelle sowie Datum und Uhrzeit festgehalten. Als Ereignisquellen werden „Anwendung“ (Ereignisse innerhalb von Anwendungsprogrammen), „System“ (Ereignisse innerhalb des Betriebssystems) und „Sicherheit“ unterschieden.

Mitunter wird das Ereignisprotokoll von Support-Betrügern missbraucht, um gravierende Fehler vorzutäuschen.

Das folgende Beispiel zeigt, wie man das Protokoll ausliest und die einzelnen Ereignisse mit einem Keyword(DEC) leeren kann. Der Code liefert die Ereignisliste und den Keyword(DEC) Wert.

uses ExtCtrls, ActiveX, ComObj

procedure  GetLogEvents;
const
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT Category,ComputerName,EventCode,Message,RecordNumber FROM Win32_NTLogEvent  Where Logfile="System"','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Form1.Memo1.Lines.Add(Format('Category          %s',[String(FWbemObject.Category)]));
    Form1.Memo1.Lines.Add(Format('Computer Name     %s',[String(FWbemObject.ComputerName)]));
    Form1.Memo1.Lines.Add(Format('EventCode         %d',[Integer(FWbemObject.EventCode)]));
    Form1.Memo1.Lines.Add(Format('Message           %s',[String(FWbemObject.Message)]));
    Form1.Memo1.Lines.Add(Format('RecordNumber      %d',[Integer(FWbemObject.RecordNumber)]));
    FWbemObject:=Unassigned;
  end;
  Screen.Cursor := crHourGlass;
end;

function PE_ClearEventLogNow(pEventLogKey: PChar):Integer;
 var
  hLog: THandle;
  NumberOfRecords: DWord;
begin
  Result := -1;
  hLog   :=  OpenEventLog(NIL, pEventLogKey);
  if hLog <> INVALID_HANDLE_VALUE then
  begin
    GetNumberOfEventLogRecords(hLog, NumberOfRecords);

    if not ClearEventLog(hLog, NIL) then
    begin
      CloseEventLog(hLog);
      Exit;
    end;
    CloseEventLog(hLog);
    Result := 0;
  end;
end;
Protokolle auslesen :
procedure TForm1.Button1Click(Sender: TObject);
begin
 Screen.Cursor := crHourGlass;
 try
    CoInitialize(nil);
    try
      GetLogEvents;
    finally
      CoUninitialize;
    end;
 except
    //on E:EOleException do
        //ShowMessage(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    //on E:Exception do
        //Writeln(E.Classname, ':', E.Message);
  end;
 //Writeln('Press Enter to exit');
 //Readln;
end;
Ereigniss leeren :
procedure TForm1.Button2Click(Sender: TObject);
begin
  PE_ClearEventLogNow(PChar(Edit1.Text));
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate