c++ - 事件日志最旧记录号

标签 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

最佳答案

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

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

关于c++ - 事件日志最旧记录号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958610/

相关文章:

linux - 通过传递路径打开文件在 Linux 上有效,但在 Windows 上无效

.net - 正确使用应用程序配置文件中的 <system.diagnostics> 设置

c++ - 如何使用 EvtQuery 函数查找日志文件的大小?

c# - 如何让 EventLog 将用户名记录到 Window 事件日志中?

c++ - gcc 6.3 和 clang 4.0 中的 std::get_time() 不适用于完整的月份名称

c++ - 使用 valgrind 忽略部分代码 - memcheck

c++ - cstring -> c++ 字符串转换

c++ - 在 Windows 上为 MinGW 编译的 C++ 程序是否适用于 Linux 上的 GNU 编译器?

windows - 如何在 Windows 和跨平台中为 git commit 消息在 npm 脚本中传递当前日期时间?

C++ 从一个大文件中解析一行