FormatMessage при чтении eventlog'а
От: lighting  
Дата: 04.07.05 12:01
Оценка:
Считываются сообщения из журнала без проблем, однако когда пытаюсь привести их к удобочитаемому виду с помощью FormatMessage функция возвращает ошибку ERROR_INVALID_PARAMETER. Какой параметр неверный я так и не смог найти, вроде-как все правильные Вот исходник процедуры, помогите плз. найти ошибку.
int GetEventLogState()
{
 EVENTLOGRECORD *pEventBuff;
 BYTE bBuffer[BUFFER_SIZE];
 DWORD BytesRead, Needed, ReadResult, OldestRec, dwArgumentOffset;
 pEventBuff = (EVENTLOGRECORD *) &bBuffer;
 char *ArgStr = (char*)NULL;
 HANDLE hEventLog=OpenEventLog(ServerName,"System");
 if (hEventLog!=NULL)
 {
   cout<<"Event log succesfully opened"<<endl;
   GetOldestEventLogRecord(hEventLog,&OldestRec);
   ReadResult=ReadEventLog(hEventLog,EVENTLOG_SEEK_READ | EVENTLOG_FORWARDS_READ, OldestRec, pEventBuff, BUFFER_SIZE, &BytesRead, &Needed);
   va_list *ArgList;
   ArgList = new va_list [pEventBuff->NumStrings];
   dwArgumentOffset = pEventBuff->StringOffset;
     for (int i=0;i<pEventBuff->NumStrings;i++)
     {
          ArgList[i] = (LPSTR)((LPBYTE)pEventBuff + dwArgumentOffset);
          dwArgumentOffset += strlen(ArgList[i]);
     }

     FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER ||
                    FORMAT_MESSAGE_FROM_HMODULE ||
                    FORMAT_MESSAGE_FROM_SYSTEM ||
                    FORMAT_MESSAGE_ARGUMENT_ARRAY,
                    hModule,
                    pEventBuff->EventID,
                    0,
                    ArgStr, 0, ArgList );
     cout<<"Last Error - "<<GetLastError()<<endl;
       if (ArgStr!=NULL) cout<<"Event description: "<<ArgStr<<endl;     
     else cout<<"ArgStr is NULL"<<endl;
     CloseEventLog(hEventLog);
 }
 else cout<<"Error opening Event log"<<endl;
 return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.