2010-06-28 11 views
1

我有一個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)他們是否有其他方式來閱讀事件日誌。

在此先感謝。

- 加尼甚

回答

3

這是一個錯誤,請檢查MS的KB此條http://support.microsoft.com/kb/177199

+0

我應該注意到我得到這個錯誤參數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

相關問題