1

WOW64 環境の Windows Server 2008 R2 で、システム (つまり、アプリケーション/システム/セキュリティ) イベント ログを読み取る MFC アプリケーションがあります。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];
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」に従ってログを読み取ります。

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

これはバグです。MS の KB http://support.microsoft.com/kb/177199でこのエントリを確認してください。

于 2012-11-28T15:41:56.913 に答える