Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Вниз

Кто-нибудь работал с ReadEventLog ? 


Севостьянов Игорь   (2001-11-14 11:58) [0]

При вызове функции ReadEventLog возникает ошибка - The parameter is incorrect. В чем проблема ?

Текст процедуры:

type
PEVENTLOGRECORD = ^EVENTLOGRECORD;
EVENTLOGRECORD = 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;

procedure ReadLogMessage;
const
EVENTLOG_SEQUENTIAL_READ = 1;
EVENTLOG_SEEK_READ = 2;
EVENTLOG_FORWARDS_READ = 4;
EVENTLOG_BACKWARDS_READ = 8;
MAX_PREFERRED_LENGTH = $FFFFFFFF;
var
hEventLog : THandle;
dwReadFlags,
dwRecordOffset,
nNumberOfBytesToRead: DWord;
lpBuffer: Pointer;//PEVENTLOGRECORD;
pnBytesRead,
pnMinNumberOfBytesNeeded: DWord;
lpUNCServerName,
lpSourceName: string;
begin
dwReadFlags := EVENTLOG_SEEK_READ;
dwRecordOffset := 0;
//lpBuffer := nil;
nNumberOfBytesToRead := MAX_PREFERRED_LENGTH; //255
pnBytesRead := 0;
pnMinNumberOfBytesNeeded := 0;

lpUNCServerName := "";
lpSourceName := "C:\WINNT\SYSTEM32\CONFIG\SYSEVENT.EVT";
GetMem(lpBuffer, nNumberOfBytesToRead);

hEventLog := OpenEventLog(PChar(lpUNCServerName), PChar(lpSourceName));
try
if hEventLog = 0 then RaiseWin32Error(GetLastError);
if not ReadEventLog(hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded) then
begin
CloseEventLog(hEventLog);
FreeMem(lpBuffer,nNumberOfBytesToRead);
RaiseWin32Error(GetLastError);
end;
finally
CloseEventLog(hEventLog);
FreeMem(lpBuffer,nNumberOfBytesToRead);
end;
end;



Tosov   (2001-11-14 23:48) [1]

А чего у тебя такой lpSourceName странный?
Вроде од должен быть Application или Security или System
Далее ..
pUNCServerName:PChar;
pUNCServerName:=nil; //Обычно так "называется" локальный компьютер

Закрывать одно и тоже 2 раза не очень хорошо
>CloseEventLog(hEventLog);

PS если нужно просмотреть backup журнала OpenBackupEventLog



Севостьянов Игорь   (2001-11-15 11:00) [2]

Уважаемый Tosov
Все что Вы написали интересно, но

pUNCServerName:PChar;

pUNCServerName:=nil;
hEventLog := OpenEventLog(lpUNCServerName, lpSourceName);
и
pUNCServerName:string;

pUNCServerName:="";
hEventLog := OpenEventLog( PChar(lpUNCServerName), lpSourceName);

Одно и тоже

И функция возвращает мне hEventLog, но даже после Ваших изменений ничего не изменилось (попробовали бы протестить процедуру у себя)
Насчет CloseEventLog(hEventLog) согласен, но это не актуально (правильно обработать можно всегда, по крайней мере загвоздка не в нем), а вот ReadEventLog(hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded) актуально !!!




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.017 c
1-42487           ev                    2001-12-22 11:00  2002.01.14  
что быстрее?


1-42471           dimonf                2001-12-24 17:15  2002.01.14  
Как быстро выводить (прорисовывать) графическую информацию на Canvas?


6-42524           Victoz                2001-10-19 11:05  2002.01.14  
Опять про WinPopup и Mailslot и немного про кодировки


3-42388           Dim                   2001-12-10 12:48  2002.01.14  
DLL


4-42612           sandman               2001-11-10 20:34  2002.01.14  
Отсылка сообщения через OLE