(
uses
Winapi
.
Windows, Winapi
.
Messages, System
.
SysUtils, System
.
Variants, System
.
Classes, Vcl
.
Graphics,
Vcl
.
Controls, Vcl
.
Forms, Vcl
.
Dialogs, Vcl
.
StdCtrls, System
.
DateUtils;)
--------------------------------------------------------
procedure
TForm1
.
Button1Click(Sender: TObject);
type
TEventLogRecord =
record
Length: dword;
Reserved: dword;
RecordNumber: dword;
TimeGenerated: dword;
TimeWritten:dword;
EventID: dword;
EventType:
word
;
NumStrings:
word
;
EventCategory:
word
;
ReservedFlags:
word
;
ClosingRecordNumber: dword;
StringOffset: dword;
UserSidLength: dword;
UserSidOffset: dword;
DataLength: dword;
DataOffset: dword;
end
;
type
TEventData=
record
SubjectUserSid:dword;
SubjectUserName:dword;
SubjectDomainName:dword;
SubjectLogonId:dword;
Status:dword;
ProcessId:dword;
ProcessName:dword;
end
;
PTEventLogRecord = ^TEventLogRecord;
var
h, dwread, dwneeded: dword;
p, src:
pointer
;
b:PTEventLogRecord;
s,proba:
string
;
begin
memo1
.
Clear;
h:=OpenEventLog(
nil
,
PChar
(
'Security'
));
if
h<>INVALID_HANDLE_VALUE
then
begin
p:=AllocMem(
1024
*
32
);
src:=p;
while
ReadEventLog(h,
4
or
1
,
0
, p,
1024
*
32
, dwread, dwneeded)
do
begin
while
dwread>
0
do
begin
begin
b:=p;
s:=Utf8ToAnsi(
'record number: '
+IntToStr(b^.RecordNumber)+#
13
#
10
+
'source: '
+
PChar
(
integer
(b)+sizeof(TEventLogRecord))+#
13
#
10
+
'event id: '
+ IntToHex(b^.EventID,
4
) +#
13
#
10
+
'RecordNumber: '
+IntToStr(b^.RecordNumber) +#
13
#
10
+
'EventID: '
+IntToStr(b^.EventID) +#
13
#
10
+
'DataOffset: '
+IntToStr(b^.DataOffset) +#
13
#
10
+
'datatime :'
+ datetimetostr(UnixToDateTime(b^.TimeGenerated)+StrToTime(
'4:00'
))+#
13
#
10
+
'SubjectUserSid :'
+
PChar
(PSID(DWORD(b) + DWORD(TEventLogrecord(b^).UserSIDOffset)))+#
13
#
10
+
'Proba1 :'
+WideCharToString(PSID(DWORD(b) + DWORD(TEventLogRecord(b^).EventID)))+#
13
#
10
+
'Proba2 :'
+WideCharToString(PSID(DWORD(b) + DWORD(TEventLogRecord(b^).EventType)))+#
13
#
10
+
'Proba3 :'
+WideCharToString(PSID(DWORD(b) + DWORD(TEventLogRecord(b^).EventCategory)))+#
13
#
10
);
Memo1
.
Lines
.
Add(s);
end
;
dwread:=dwread-b^.Length;
p:=
pointer
(
integer
(p)+b^.Length);
end
;
p:=src;
ZeroMemory(p,
1024
*
32
);
end
;
FreeMem(src);
CloseEventLog(h);
end
;
end
;
end
.