|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
не получается чтение журнала Security.
Не могу справится с проблемой, а именно - нормально вывести путь процесса. То выдает обрезанную строчку, то иероглифами, а то и вовсе пустую.
Как вывести нормально? win7, delphi xe3; Вот код: Код:
(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. Последний раз редактировалось susanin95@gmail.com, 20.06.2014 в 16:52. |