我正在尝试使用新的事件日志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
答案 0 :(得分:2)
我无法让新API用于最早的记录号,并且不得不恢复使用旧API来检索最早的记录号。