非常に単純な C# コードを使用して、ドメイン コントローラーのセキュリティ イベント ログを「ライブ」で監視しているため、発生したアカウント ロックアウト イベントをキャプチャできます。
2003 で動作するコードがありましたが、現在は 2008 R2 に移動しました (そして、古い 644 イベント ID ではなく 4740 イベント ID に一致するようにコードを変更しました) サービス開始後、数分間、すべてのイベントがログに記録されます。 、しかしその後、大量の「古い」メッセージが表示され、イベント ID がすべて 0 になり、永遠にスパム行為が続きます。決定的に言うと、これらはエントリ書き込みイベントを起動していますが、すべて 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) からエントリを取得し、それらをファイルに出力する別のスレッドがあります。ファイルは、上記の出力が発生する場所です。
読んでくれてありがとう!ありとあらゆる助けに感謝