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;
}
Re: FormatMessage при чтении eventlog'а
От: Conr Россия  
Дата: 04.07.05 14:54
Оценка:
Здравствуйте, lighting, Вы писали:

L>Считываются сообщения из журнала без проблем, однако когда пытаюсь привести их к удобочитаемому виду с помощью FormatMessage функция возвращает ошибку ERROR_INVALID_PARAMETER. Какой параметр неверный я так и не смог найти, вроде-как все правильные Вот исходник процедуры, помогите плз. найти ошибку.

L>
L>int GetEventLogState()
.....
L>     FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER ||
L>                    FORMAT_MESSAGE_FROM_HMODULE ||
L>                    FORMAT_MESSAGE_FROM_SYSTEM ||
L>                    FORMAT_MESSAGE_ARGUMENT_ARRAY,
L>                    hModule,
L>                    pEventBuff->EventID,
L>                    0,
L>                    ArgStr, 0, ArgList );
.....
L>

hModule как получаете?
Re: FormatMessage при чтении eventlog'а
От: MShura  
Дата: 04.07.05 15:37
Оценка:
Если пользуешься FORMAT_MESSAGE_ALLOCATE_BUFFER, то:
L>
L>int GetEventLogState()
L>{
L> char *ArgStr = (char*)NULL;
LL>     FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER ||
L>                    FORMAT_MESSAGE_FROM_HMODULE ||
L>                    FORMAT_MESSAGE_FROM_SYSTEM ||
L>                    FORMAT_MESSAGE_ARGUMENT_ARRAY,
L>                    hModule,
L>                    pEventBuff->EventID,
L>                    0,
L>                    (LPTSTR)&ArgStr, 0, ArgList );
       LocalFree( ArgStr );
L>}
L>
Re[2]: FormatMessage при чтении eventlog'а
От: lighting  
Дата: 05.07.05 04:51
Оценка:
Здравствуйте, Conr, Вы писали:

C>hModule как получаете?


  hModule=LoadLibrary("c:\\Winnt\\system32\\stisvc.exe");

Вызывается в другой процедуре заранее, hModule глобальная переменая.
Re[2]: FormatMessage при чтении eventlog'а
От: lighting  
Дата: 05.07.05 04:53
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Если пользуешься FORMAT_MESSAGE_ALLOCATE_BUFFER, то:

L>>
L>>int GetEventLogState()
L>>{
L>> char *ArgStr = (char*)NULL;
LL>>     FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER ||
L>>                    FORMAT_MESSAGE_FROM_HMODULE ||
L>>                    FORMAT_MESSAGE_FROM_SYSTEM ||
L>>                    FORMAT_MESSAGE_ARGUMENT_ARRAY,
L>>                    hModule,
L>>                    pEventBuff->EventID,
L>>                    0,
L>>                    (LPTSTR)&ArgStr, 0, ArgList );
MS>       LocalFree( ArgStr );
L>>}
L>>

Спасибо исправил, однако ошибка ERROR_INVALID_PARAMETER осталась
Re[2]: FormatMessage при чтении eventlog'а
От: MShura  
Дата: 05.07.05 08:14
Оценка:
Выражение

FORMAT_MESSAGE_ALLOCATE_BUFFER ||
FORMAT_MESSAGE_FROM_HMODULE ||
FORMAT_MESSAGE_FROM_SYSTEM ||
FORMAT_MESSAGE_ARGUMENT_ARRAY


Будет равно чему угодно, но не

FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_HMODULE |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ARGUMENT_ARRAY
Re[3]: FormatMessage при чтении eventlog'а
От: Pavel Dvorkin Россия  
Дата: 06.07.05 05:56
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Выражение


MS>
MS>FORMAT_MESSAGE_ALLOCATE_BUFFER ||
MS>FORMAT_MESSAGE_FROM_HMODULE ||
MS>FORMAT_MESSAGE_FROM_SYSTEM ||
MS>FORMAT_MESSAGE_ARGUMENT_ARRAY
MS>


MS>Будет равно чему угодно, но не


MS>
MS>FORMAT_MESSAGE_ALLOCATE_BUFFER |
MS>FORMAT_MESSAGE_FROM_HMODULE |
MS>FORMAT_MESSAGE_FROM_SYSTEM |
MS>FORMAT_MESSAGE_ARGUMENT_ARRAY
MS>


Маленький комментарий — не будет оно равно чему угодно. Единице оно будет равно — со 100% гарантией
With best regards
Pavel Dvorkin
Re[3]: FormatMessage при чтении eventlog'а
От: lighting  
Дата: 06.07.05 06:51
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Выражение


MS>
MS>FORMAT_MESSAGE_ALLOCATE_BUFFER ||
MS>FORMAT_MESSAGE_FROM_HMODULE ||
MS>FORMAT_MESSAGE_FROM_SYSTEM ||
MS>FORMAT_MESSAGE_ARGUMENT_ARRAY
MS>


MS>Будет равно чему угодно, но не


MS>
MS>FORMAT_MESSAGE_ALLOCATE_BUFFER |
MS>FORMAT_MESSAGE_FROM_HMODULE |
MS>FORMAT_MESSAGE_FROM_SYSTEM |
MS>FORMAT_MESSAGE_ARGUMENT_ARRAY
MS>

Да, стормозил... спасибо за помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.