1

我有一个 MFC 应用程序,它在 WOW64 环境中读取 Windows Server 2008 R2 上的系统(即Application/System/Security)事件日志。我在Windows Server 2008 R2中遇到 std SDK ::ReadEventLog()函数的问题。下面我提供了代码片段,但相同的代码/API 在 Windows XP WOW64 和 x64 环境中完美运行。错误代码“87”是指“参数不正确”,但据我所知,我传递给::ReadEventLog()函数的参数似乎是正确的。

[代码]

//缓冲区大小。const int BUFFER_SIZE = 1024*10
BYTE l_bBufferSize[BUFFER_SIZE];
事件日志记录* l_pEvntLogRecord = NULL;

l_pEvntLogRecord = (EVENTLOGRECORD *) &l_bBufferSize; ::SetLastError(0);

/* 调整“计数器”以读取日志。'l_nReadRecordIndex' 与列表控件映射,例如,在按下键时,'l_nReadRecordIndex' 设置为“GetCountPerPage() + 1”,这是一种情况,因为它们的情况很多。*/

DWORD l_dwLogCounter = (GetTotalNumberOfRecords() - l_nReadRecordIndex) + 1;

//按照“nCntToReadRecords”读取日志。

for(l_dwLogCounter;l_nNoOfRecTobeRead <= nCntToReadRecords;l_dwLogCounter--, l_nNoOfRecTobeRead++) {

//获取要读取的实际位置。

if(0 != ::ReadEventLog( m_hEventLogHandle, EVENTLOG_SEEK_READ|EVENTLOG_FORWARDS_READ,
l_dwLogCounter, l_pEvntLogRecord, BUFFER_SIZE, &l_dwReadBytes, &l_dwNeedBytes))

{
     DWORD l_dwErrCode = 0;
     l_dwErrCode = ::GetLastError();    //87 is returned
     return FALSE
}

}

//数据填充代码

如果有人知道类似的问题或解决过类似的问题,请告诉我解决方案。请参考上面的代码片段,让我知道以下事情,a)什么是不正确的参数。b)他们是否有任何其他方式来阅读事件日志。

提前致谢。

——甘尼什

4

1 回答 1

3

It is a bug, check this entry in MS's KB http://support.microsoft.com/kb/177199

于 2012-11-28T15:41:56.913 回答