Считываются сообщения из журнала без проблем, однако когда пытаюсь привести их к удобочитаемому виду с помощью 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;
}
Здравствуйте, 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 как получаете?
Если пользуешься 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>
Здравствуйте, Conr, Вы писали:
C>hModule как получаете?
hModule=LoadLibrary("c:\\Winnt\\system32\\stisvc.exe");
Вызывается в другой процедуре заранее, hModule глобальная переменая.
Здравствуйте, 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 осталась
Выражение
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
Здравствуйте, 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% гарантией
Здравствуйте, 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>
Да, стормозил... спасибо за помощь!