事件日志最旧的记录号

时间:2010-06-02 14:24:39

标签: c++ windows event-log

我正在尝试使用新的事件日志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

1 个答案:

答案 0 :(得分:2)

我无法让新API用于最早的记录号,并且不得不恢复使用旧API来检索最早的记录号。

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