作为背景,我试图将来自多台机器的 Windows 安全事件日志条目合并到一个 SQL 表中,以便我可以报告它们。这一切都在 C# 中工作。
但是我需要一种方法来更有效地确定我以前是否看过这个事件,这样我就不必对我的数据库进行复杂的查找来查看我以前是否看过每个条目。
因为可以一次生成多个事件,所以到目前为止我看到的避免重复的唯一方法是检查事件 ID、生成时间、机器名称以及某些情况下的参数。
.Net 框架是否公开了我可以用来简化此过程的任何形式的唯一标识符?
提前致谢
作为背景,我试图将来自多台机器的 Windows 安全事件日志条目合并到一个 SQL 表中,以便我可以报告它们。这一切都在 C# 中工作。
但是我需要一种方法来更有效地确定我以前是否看过这个事件,这样我就不必对我的数据库进行复杂的查找来查看我以前是否看过每个条目。
因为可以一次生成多个事件,所以到目前为止我看到的避免重复的唯一方法是检查事件 ID、生成时间、机器名称以及某些情况下的参数。
.Net 框架是否公开了我可以用来简化此过程的任何形式的唯一标识符?
提前致谢
好的,在您的帮助下解决了。获取时间戳、事件 ID 和机器名称,然后创建一个 MD5 哈希。简单且易于索引。性能也有很长的路要走。
我不确定您使用的是什么 C# 方法,但您可以获得可以使用的记录号(例如计算机 + 日志 + 记录号)。我知道您可以通过 ManagementObjectSearcher(又名 WMI)获取 C# 中的记录号,但不确定其他 API。
您还可以通过 win32 API 获取记录号:
旧 API:EVENTLOGRECORD 结构
不幸的是,您唯一能做的就是使用计算机、事件源、事件 ID 和时间戳的组合键进行唯一匹配。事件框架 AFAIK 中没有全局唯一 ID。