我有一個MFC應用程序,它在Windows上讀取系統(即應用程序/系統/安全)事件日誌Server 2008 R2在WOW64環境中。我面臨一個問題與標準的SDK :: ReadEventLog()函數在Windows Server 2008 R2。下面我提供了代碼片段,但是相同的代碼/ API在Windows XP WOW64 & x64環境中完美工作。錯誤代碼'87'是指「參數不正確」,但根據我傳遞給:: ReadEventLog()函數的參數似乎是正確的。在讀取系統中的應用程序/系統/安全事件日誌時,Windows Server 2008 R2上的ReadEventLog()API失敗並顯示錯誤代碼87
[代碼]
// 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'與列表控件映射,例如,在按鍵關閉時,'l_nReadRecordIndex'被設置爲「GetCountPerPage()+ 1」,這是一種情況,因爲它們很多情況。 */
DWORD l_dwLogCounter =(GetTotalNumberOfRecords() - l_nReadRecordIndex)+ 1;
//根據「nCntToReadRecords」讀取日誌。
爲(l_dwLogCounter; l_nNoOfRecTobeRead < = nCntToReadRecords; l_dwLogCounter--,l_nNoOfRecTobeRead ++){
//獲取實際位置讀取。
如果(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)他們是否有其他方式來閱讀事件日誌。
在此先感謝。
- 加尼甚
我應該注意到我得到這個錯誤參數87即使使用SEQUENTIAL_READ在文章的建議,使用代碼從這裏http://msdn.microsoft.com/en-us/library/bb427356(v=vs.85)。aspx在Windows 8.1 x64上。 – 2014-02-03 23:49:57