【问题标题】:Event Log Oldest Record Number事件日志最旧记录编号
【发布时间】: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 吗?另外,你应该“回答”你自己的问题。

标签: c++ windows event-log


【解决方案1】:

我无法让新 API 为最旧的记录号工作,不得不恢复使用旧 API 来检索最旧的记录号。

msdn.microsoft.com/en-us/library/aa363665(VS.85).aspx

【讨论】:

  • 当 Vista 出现时,我向 Microsoft 报告了这个明显不寻常且出乎意料的行为。他们确认这是一个问题,但表示他们不会更改它,因为代码可能已经依赖于(不正确的)行为。令人沮丧的是,这在 Windows 7 中仍未改变。
  • 使用传统方法的唯一问题是,一旦 eventrecordid 超过 0xFFFF FFFF,它将不再起作用。
猜你喜欢
  • 2011-10-24
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多