【发布时间】:2023-03-16 19:13:01
【问题描述】:
我正在尝试使用新的事件日志 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
【问题讨论】:
-
更新给那些感兴趣的人。我无法让新 API 为最旧的记录号工作,不得不恢复使用旧 API 来检索最旧的记录号。
-
Mitch,你能链接那个 API 吗?另外,你应该“回答”你自己的问题。