c – GetNumberOfEventLogRecords返回错误的事件日志数
作者:互联网
我有这个C代码来读取事件日志记录
DWORD GetLogRecords(LPCWSTR wsLogFile)
{
HANDLE hEvt = OpenEventLog(NULL, wsLogFile);
if (hEvt==NULL) return 0;
DWORD dwTotalRecords;
BOOL res = GetNumberOfEventLogRecords(hEvt, &dwTotalRecords);
CloseEventLog(hEvt);
return (res != 0) ? dwTotalRecords : 0;
}
结果
atlTraceGeneral - C:\Windows\system32\winevt\logs\ACEEventLog.evtx - 23499 Total Records
atlTraceGeneral - C:\Windows\system32\winevt\logs\Application.evtx - 23499 Total Records
atlTraceGeneral - C:\Windows\system32\winevt\logs\ConnectionInfo.evtx - 23499 Total Records
atlTraceGeneral - C:\Windows\system32\winevt\logs\Error.evtx - 23499 Total Records
atlTraceGeneral - C:\Windows\system32\winevt\logs\HardwareEvents.evtx - 23499 Total Records
atlTraceGeneral - C:\Windows\system32\winevt\logs\Internet Explorer.evtx - 23499 Total Records
atlTraceGeneral - C:\Windows\system32\winevt\logs\Key Management Service.evtx - 23499 Total Records
...
我已使用计算机上所有.EVTX日志文件的完整路径调用此函数(150个日志文件).每次它返回23499!我的日志文件有不同的大小和一些0,为什么我总是得到23499?
UPDATE2:现在我清除了应用程序日志后,所有.evtx日志文件都得到0.我认为它始终获取应用程序日志而不是指定的.evtx文件.
更新:正如Remy Lebeau所说,但结果仍然相同.
解决方法:
为了其他人的利益,这个问题的解决方案是OpenEventLog不接受路径名.相反,您必须为其提供事件日志的源名称(类似“HardwareEvents”).
如果使用无效的源名称(包括提供路径名)调用OpenEventLog,则如文档所示,它将打开应用程序日志:
If you specify a custom log and it cannot be found, the event logging
service opens the Application log.
标签:event-log,c,windows,service,winapi 来源: https://codeday.me/bug/20191003/1850273.html