Я пытаюсь использовать новый 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