我正在尝试使用新的事件日志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。如果尝试使用EvtQuery / EvtNext检索事件1,则会失败并且不会返回事件 - 正如我所期望的那样。
有谁有这种方法的经验吗?我做错了什么?我已经成功地使用其他属性(即EvtLogNumberOfLogRecords),但无法使此属性(EvtLogOldestRecordNumber)按预期运行。 http://msdn.microsoft.com/en-us/library/aa385385(v=VS.85).aspx