在C#中唯一标识事件日志条目

3
作为背景,我想将来自多台机器的Windows安全事件日志条目合并到一个单独的SQL表中,以便我可以对其进行报告。这在C#中都可以实现。
但是我需要一种更有效的方法来确定我之前是否看过此事件,这样我就不必在数据库中进行复杂的查找以查看我之前是否看到了每个条目。
由于可能同时生成多个事件,迄今为止我所见到的避免重复的唯一方法是检查事件ID、生成时间、计算机名称以及某些情况下的参数。
.NET Framework是否公开了任何形式的唯一标识符,可以用来简化这个过程?
提前致谢。

GUID可以帮助你在这里唯一地标识。 - Zenwalker
这正是我要找的,但它在EventLogEntry中的哪里公开呢?我在框架中找不到它。 - chrismor
3个回答

1

我不确定你正在使用哪个C#方法,但是你可以获取记录号码,然后可以使用它(例如:计算机+日志+记录号码)。我知道你可以通过ManagementObjectSearcher(又名WMI)在C#中获取记录号码,但不确定其他API是否也可以。

你也可以通过win32 API获取记录号码:

旧API: EVENTLOGRECORD结构

新API: EventRecordID (SystemPropertiesType)元素


ev = new EventLog(strLogType, strServerName); for (nIndex = nEntries - 1; nIndex != 0; nIndex--) { ee = ev.Entries[nIndex]; }译文:ev = new EventLog(strLogType, strServerName); for (nIndex = nEntries - 1; nIndex != 0; nIndex--) { ee = ev.Entries[nIndex]; } - chrismor

1

好的,借助你们所有人的帮助,问题已经解决了。获取时间戳、事件ID和机器名称,然后创建它们的MD5哈希值。这样简单易行,并且可以轻松索引。性能也得到了大幅提升。


0

不幸的是,您唯一能做的就是获取计算机、事件源、事件 ID 和时间戳的组合键来进行唯一匹配。据我所知,在事件框架中没有全局唯一标识符。


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