首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

以托管 C++ 監視 Windows 事件日誌:EventLog 類別實戰

     編輯:關於C++

為何監視事件日誌?

註冊表監視工具常見,但事件日誌 (特別是安全性日誌) 記錄關鍵系統活動:登入嘗試、掃描攻擊、服務啟停、權限變更。即時監控可早期發現異常,搭配郵件/簡訊通知強化防禦。

.NET EventLog 類別核心用法

命名空間:System::Diagnostics。關鍵屬性 EnableRaisingEvents 控制是否引發 EntryWritten 事件。

1. 定義事件處理類別


#using 
using namespace System::Diagnostics;

__gc class LogMonitor {
public:
    void OnEntryWritten(Object* sender, EntryWrittenEventArgs* e) {
        EventLogEntry* entry = e->Entry;
        // 處理新日誌項目
        Console::WriteLine("[{0}] {1}: {2}",
            entry->TimeGenerated, entry->Source, entry->Message);
    }
};

2. 建立 EventLog 實例並啟用事件


EventLog* log = new EventLog("Application");  // 或 "System", "Security"
log->EnableRaisingEvents = true;

3. 繫結事件處理器


LogMonitor* monitor = new LogMonitor();
log->EntryWritten += new EntryWrittenEventHandler(monitor, &LogMonitor::OnEntryWritten);

EventLogEntry 關鍵屬性

屬性說明
MachineName產生日誌的電腦名稱
Source事件來源 (應用程式/服務名稱)
Message人類可讀的詳細描述
EntryType枚舉:Information, Warning, Error, SuccessAudit, FailureAudit
InstanceId (Event ID)事件識別碼 (來源特定)
Data原始二進位資料 (如記憶體傾印)

限制與注意事項

  • 僅支援本機監視,遠端需 WMI 或 RPC。
  • 高頻率事件可能導致通知延遲或批次送達,非即時保證。
  • Security 日誌需管理員權限讀取。
  • .NET 2.0+ 建議使用新語法 (gcnew, EventHandler<T>),舊專案需設定 /clr:oldSyntax。

擴充建議

  • 依 EntryType 或 InstanceId 過濾關鍵事件 (如 4625 登入失敗)。
  • 整合 System::Net::Mail::SmtpClient 發送郵件警示。
  • 寫入自訂日誌檔/資料庫供稽核查詢。
  • 封裝為 Windows Service 長期背景執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved