我正在尝试使用新的事件日志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
发布于 2010-10-07 21:24:23
我不能让新的API对最旧的记录号起作用,必须恢复使用旧的API来检索最旧的记录号。
msdn.microsoft.com/en-us/library/aa363665(VS.85).aspx
https://stackoverflow.com/questions/2958610
复制相似问题