事件日志最早记录编号

3

我正在尝试使用新的事件日志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
Mitch,你可以链接那个API吗?另外,你应该“回答”自己的问题。 - Greg Olmstead
http://msdn.microsoft.com/en-us/library/aa363665(VS.85).aspx - Mitch
1个回答

4

当Vista发布时,我向微软报告了这个明显不寻常和意外的行为。他们确认这是一个问题,但表示他们不会更改它,因为代码可能已经依赖于(不正确的)行为。看到在Windows 7中仍然没有改变,这让人感到沮丧。 - Lucky Luke
1
使用传统方法的唯一问题是,一旦eventrecordid超过0xFFFF FFFF,它将不再起作用。 - Lucky Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接