从系统读取应用程序/系统/安全事件日志时,ReadEventLog()API在Windows Server 2008 R2上失败并显示错误代码87

时间:2010-06-28 12:37:48

标签: windows-server-2008 windows-server-2008-r2

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

[代码]

// BUFFERSIZE。 const int BUFFER_SIZE = 1024 * 10
BYTE l_bBufferSize [BUFFER_SIZE];
EVENTLOGRECORD * l_pEvntLogRecord = NULL;

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

/ * 调整“计数器”以读取日志。 'l_nReadRecordIndex'与列表控件映射,例如在key down上,'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)他们是否有其他方式来阅读事件日志。

提前致谢。

- 内甚

1 个答案:

答案 0 :(得分:3)

这是一个错误,请在MS的KB http://support.microsoft.com/kb/177199

中查看此条目