我有一个 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)他们是否有任何其他方式来阅读事件日志。
提前致谢。
——甘尼什