事件記錄檔檔案格式
每個事件記錄檔都包含標頭 (,由具有固定大小的 ELF_LOGFILE_HEADER 結構) ,後面接著 由 EVENTLOGRECORD 結構) 所代表的可變事件 ( (記錄數,以及由 ELF_EOF_RECORD 結構表示) 所代表的檔案結尾記錄。
建立事件記錄檔時,會在事件記錄檔中寫入 ELF_LOGFILE_HEADER 結構和 ELF_EOF_RECORD 結構,並在每次將事件寫入記錄檔時更新。
當應用程式呼叫 ReportEvent 函式以將專案寫入事件記錄檔時,系統會將參數傳遞至事件記錄服務。 事件記錄服務會使用資訊,將 EVENTLOGRECORD 結構寫入事件記錄檔。 下圖說明此程序。
事件記錄會以下列其中一種方式組織:
非換行。 最舊的記錄會緊接在事件記錄標頭之後,並將新記錄新增至ELF_EOF_RECORD) 之前新增 (的最後一筆記錄。 下列範例顯示非包裝方法:
HEADER (ELF_LOGFILE_HEADER) EVENT RECORD 1 (EVENTLOGRECORD) EVENT RECORD 2 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD)
建立事件記錄檔或清除事件記錄檔時,可能會發生非換行。 事件記錄檔會繼續不換行,直到達到事件記錄檔大小限制為止。 事件記錄檔大小受限於 MaxSize 組態值或系統資源數量。
達到事件記錄檔大小限制時,可能會開始換行。 包裝是由 保留 組態值所控制。 如需事件記錄檔組態值的詳細資訊,請參閱 Eventlog 機碼。
包裝。 記錄會組織成迴圈緩衝區。 新增記錄時,會取代最舊的記錄。 最舊和最新的記錄位置會有所不同。 下列範例顯示 wrapping 方法。
HEADER (ELF_LOGFILE_HEADER) Part of EVENT RECORD 300 (EVENTLOGRECORD) EVENT RECORD 301 (EVENTLOGRECORD) . . . EVENT RECORD 400 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD) Wasted space EVENT RECORD 102 (EVENTLOGRECORD) EVENT RECORD 103 (EVENTLOGRECORD) . . . EVENT RECORD 299 (EVENTLOGRECORD) Part of EVENT RECORD 300 (EVENTLOGRECORD)
在範例中,最舊的記錄不再為 1,但為 102,因為已覆寫記錄 1 到 101 的空間。
ELF_EOF_RECORD與最舊的記錄之間有一些空間,因為系統會清除整數數目的記錄,以釋放最新記錄的空間。 例如,如果最新的記錄長度為 100 個位元組,而兩個最舊的記錄長度為 75 個位元組,則系統會移除兩筆最舊的記錄。 寫入新記錄時,將會使用額外的 50 個位元組。
事件記錄檔具有固定大小,而且當檔案中的記錄換行時,檔案結尾的記錄通常會分割成兩筆記錄。 例如,如果下一次寫入的位置是從檔案結尾 100 個位元組,而記錄的大小是 300 個位元組,則會在檔案結尾寫入前 100 個位元組,而下一個 200 個位元組將會在檔案開頭緊接在 ELF_LOGFILE_HEADER之後寫入。 如果檔案結尾的可用空間小於 EVENTLOGRECORD (0x38 位元組的固定部分) ,則所有新記錄都會在檔案開頭緊接在 ELF_LOGFILE_HEADER之後寫入。 檔案結尾的未使用位元組會填入模式0x00000027。
如需詳細資訊和程式碼範例,請參閱 報告事件。