3

我正在使用一些非常简单的 C# 代码来监视域控制器“实时”的安全事件日志,这样我就可以在帐户锁定事件发生时捕获它们。

我有适用于 2003 年的代码,但现在我已将其移至 2008 R2(并更改了代码以匹配 4740 事件 ID 而不是旧的 644 事件 ID)我看到所有事件在服务启动后几分钟内被记录,但随后我收到大量“旧”消息,然后是所有 0 事件 ID,永远发送垃圾邮件。确切地说,这些是触发一个条目写入事件,但都是 ID=0 条目——这真的很奇怪。

我怀疑但尚未测试过,制作一个新EventLog("security")对象会纠正这个问题,但我不想每 2 分钟做一次,我不明白为什么会触发旧事件 - 有没有人有任何想法会发生什么?

下面是发生错误时的示例输出 - 顶部的快乐日志,然后是旧日志,然后是 0 日志 - 与它在我的 DC 上发生的确切顺序相同。接下来是一些代码示例:

Event received: 5145, Time Gen = 16/04/2013 08:17:27, Time Written = 16/04/2013 08:17:27
[20 more like this edited out (differing event ids)]
Event received: 5145, Time Gen = 16/04/2013 08:00:47, Time Written = 16/04/2013 08:00:47
Event received: 5145, Time Gen = 16/04/2013 08:00:47, Time Written = 16/04/2013 08:00:47
[20 more like this edited out]
Event received: 0, Time Gen = 01/01/1970 00:00:00, Time Written = 01/01/1970 00:00:00
[**infinite** more like this edited out]

代码非常简单:

/// <summary>
/// Create a new security log listener, and enable event firing for that log
/// </summary>
protected void InitialiseSecurityEventLog()
{
    if (securityLog != null)
    {
        securityLog.EnableRaisingEvents = false;
    }

    // Create a security event log listener and put into action
    securityLog = new EventLog("security");
    securityLog.EntryWritten += new EntryWrittenEventHandler(securityLog_EntryWritten);
    securityLog.EnableRaisingEvents = true;
}

并处理:

/// <summary>
/// Process log events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void securityLog_EntryWritten(object sender, EntryWrittenEventArgs e)
{
    // Queue event for processing
    securityEventLogQueue.Add(e.Entry);
}

我有一个单独的线程从队列中检索条目(这是一个 Blocking/ConcurrentQueue)并将它们输出到文件,这是上面输出的来源

谢谢阅读!任何和所有的帮助表示赞赏

4

0 回答 0