Журнал событий Самый старый номер записи - PullRequest
1 голос
/ 02 июня 2010

Я пытаюсь использовать новый API журнала событий, чтобы получить самый старый номер записи из журнала событий Windows, но не могу заставить API возвращать тот же ответ, что и в окне просмотра событий (просматривая подробности EventRecordID). Ниже приведен пример кода, который я использую:

EVT_HANDLE log = EvtOpenLog(NULL, _logName, EvtOpenChannelPath);

EVT_VARIANT buf;
DWORD need = 0;
int vlen = sizeof(EVT_VARIANT);

ZeroMemory(&buf, vlen);
EvtGetLogInfo(log, EvtLogOldestRecordNumber, vlen, &buf, &need);

UINT64 old = buf.UInt64Val;

EvtClose(log);

Похоже, что API делает возвращение номера записи самого старого события в журнале, но не самого старого доступного события ... Я имею в виду, что у вас есть 10 записей в журнале, 1- 10 и вы очистите свой журнал. Следующие 10 вставленных событий будут 11-20. Если вы используете API, он вернет 1, а не 11, как в окне просмотра событий. Если вы попытаетесь получить событие 1 с помощью EvtQuery / EvtNext, оно завершится неудачей и не вернет событие - как я и ожидал.

У кого-нибудь есть опыт использования этого метода? Что я делаю неправильно? Я успешно использовал метод с другими свойствами (т. Е. EvtLogNumberOfLogRecords), но не могу заставить это свойство (EvtLogOldestRecordNumber) работать так, как ожидается.

http://msdn.microsoft.com/en-us/library/aa385385(v=VS.85).aspx

1 Ответ

2 голосов
/ 07 октября 2010

Мне не удалось заставить новый API работать с самым старым номером записи, и мне пришлось вернуться к использованию устаревшего API для получения самого старого номера записи.

msdn.microsoft.com / EN-US / библиотека / aa363665 (VS.85) .aspx

...