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) イベント ログを読み取る別の方法はありますか。
前もって感謝します。
-- ガネーシャ