設定和啟動自動記錄器會話

AutoLogger 事件追蹤會話會記錄操作系統開機程式早期發生的事件。 應用程式和設備驅動器可以使用 AutoLogger 工作階段,在使用者登入之前擷取追蹤。 請注意,某些設備驅動器,例如磁碟設備驅動器,不會在 AutoLogger 作業階段開始時載入。

AutoLogger 與全域記錄器不同,方式如下:

  • 您可以指定一或多個自動記錄器會話(全域記錄器是每個人記錄事件的單一會話)。
  • 當會話啟動時,AutoLogger 會將啟用通知傳送給提供者(全域記錄器未傳送啟用通知給提供者,因此提供者必須依賴其他方法來知道是否啟動全域記錄器會話,才能開始記錄事件)。
  • AutoLogger 不支持記錄 NT 核心記錄器事件(請參閱 EVENT_TRACE_PROPERTIESEnableFlags 成員)。 若要記錄NT核心記錄器事件,您必須使用 全域記錄器

如需全域記錄器檢視的詳細資訊,請參閱 設定和啟動全域記錄器會話

注意

ETW 支援 Windows Vista 和更新版本的 AutoLogger。 在 舊版操作系統上使用全域記錄器

您可以使用登錄來設定 AutoLogger 工作階段。 如果登錄機碼不存在,請新增下列登錄機碼:

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger

在 [ 自動記錄器 ] 密鑰底下,針對您想要設定的每個 AutoLogger 工作階段建立密鑰,如下列範例所示。

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger
                  \Logger Session A
                  \Logger Session B
                  \Logger Session C

針對每個會話,為每個您想要啟用會話的提供者建立密鑰。 使用提供者的 GUID 作為金鑰。

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger
                  \Logger Session A
                     \{ProviderGuid1}
                     \{ProviderGuid2}
                  \Logger Session B
                  \Logger Session C

下表描述您可以為每個 AutoLogger 工作階段定義的值。 您必須具有系統管理員許可權,才能指定這些登錄值。 StartGuid 值是唯一啟動 AutoLogger 工作階段所需的值;如果登錄中沒有該值,所有其他值都會有預設設定。 一般而言,您應該使用預設值。 如果您指定 ETW 不支援的值,ETW 將會覆寫此值。

類型 描述
BufferSize REG_DWORD 每個緩衝區的大小,以 KB 為單位。 應小於一 MB。 ETW 會使用物理記憶體的大小來計算此值。
ClockType REG_DWORD 記錄每個事件的時間戳時要使用的定時器。
  • 1 = 效能計數器值 (高解析度)
  • 2 = 系統定時器
  • 3 = CPU 循環計數器
如需每個時鐘類型的描述,請參閱 WNODE_HEADERClientContext 成員。
Windows Vista 和更新版本的預設值為 1(性能計數器值)。 在 Windows Vista 之前,預設值為 2 (系統定時器)。
DisableRealtimePersistence REG_DWORD 若要停用即時持續性,請將此值設定為 1。 即時會話的預設值為 0(已啟用)。
如果已啟用即時持續性,則會保存電腦關機時未傳遞的即時事件。 然後,當取用者連接到會話時,事件就會傳遞給取用者。
FileCounter REG_DWORD 請勿設定或修改此值。 如果 指定 FileMax ,這個值是用來遞增記錄檔名稱的序號。 如果值無效,則會假設為1。
FileName REG_SZ 記錄檔的完整路徑。 此檔案的路徑必須存在。 記錄檔是循序記錄檔。 路徑限制為 1024 個字元。
如果未 指定 FileName ,事件會寫入 %SystemRoot%\System32\LogFiles\WMI
FileMax REG_DWORD ETW 所建立之記錄檔的實例數目上限。 如果 FileName 中指定的記錄檔存在,ETW 會將 FileCounter 值附加至檔名。 例如,如果使用默認記錄檔名稱,則窗體為 %SystemRoot%\System32\LogFiles\WMI 第一次啟動計算機時,檔名為 sessionname.etl.0001、第二次檔名為 <<sessionname.etl.0002>> 等等。 如果 FileMax 為 3,則當電腦第四次重新啟動時,ETW 會將計數器重設為 1,如果存在,則會覆寫 <sessionname.etl.0001>。
支持的記錄檔實例數目上限為16。
請勿將此功能與EVENT_TRACE_FILE_MODE_NEWFILE記錄檔模式搭配使用。
FlushTimer REG_DWORD 以秒為單位,追蹤緩衝區的強制排清頻率。 排清時間下限為1秒。 這個強制排清除了當緩衝區已滿且追蹤會話停止時發生的自動排清之外。
針對實時記錄器的情況,零值(預設值)表示排清時間會設定為1秒。 實時記錄器是在 LogFileMode 設定為EVENT_TRACE_REAL_TIME_MODE
預設值是 0。 根據預設,只有在緩衝區已滿時,才會排清緩衝區。
GUID REG_SZ 字串,包含可唯一識別會話的 GUID。 數值是必要項。
LogFileMode REG_DWORD 指定一或多個記錄模式。 如需可能的值,請參閱 記錄模式常數。 預設值為 EVENT_TRACE_FILE_MODE_SEQUENTIAL。 您可以指定 EVENT_TRACE_BUFFERING_MODEEVENT_TRACE_REAL_TIME_MODE,而不是寫入記錄檔。
指定 EVENT_TRACE_BUFFERING_MODE 可避免在檔案系統可用時將會話內容排清至磁碟的成本。
請注意,使用 EVENT_TRACE_BUFFERING_MODE會導致系統忽略 MaximumBuffers 值,因為緩衝區大小是 MinimumBuffersBufferSize乘積。
AutoLogger 會話不支援 EVENT_TRACE_FILE_MODE_NEWFILE 記錄模式。
如果 指定EVENT_TRACE_FILE_MODE_APPEND則必須明確提供 BufferSize ,而且在記錄器和要附加的檔案中必須相同。
MaxFileSize REG_DWORD 記錄檔的檔案大小上限,以 MB 為單位。 除非您處於循環記錄檔模式,否則達到大小上限時,會話就會關閉。 若要指定沒有限制,請將值設定為 0。 如果未設定,則預設值為100 MB。 達到檔案大小上限時所發生的行為取決於 LogFileMode 的值
MaximumBuffers REG_DWORD 要配置的緩衝區數目上限。 一般而言,此值是緩衝區數目下限加上 20。 ETW 會使用緩衝區大小和物理記憶體大小來計算此值。 此值必須大於或等於 MinimumBuffers 的值
MinimumBuffers REG_DWORD 在啟動時配置的緩衝區數目下限。 您可以指定的緩衝區數目下限是每個處理器的兩個緩衝區。 例如,在單一處理器計算機上,緩衝區數目下限為兩個。
啟動 REG_DWORD 若要在下次重新啟動電腦時啟動 AutoLogger 工作階段,請將此值設定為 1;否則,請將此值設定為 0。
狀態 REG_DWORD AutoLogger 的啟動狀態。 如果 AutoLogger 無法啟動,則此機碼的值是適當的 Win32 錯誤碼。 如果 AutoLogger 已成功啟動,則此機碼的值會 ERROR_SUCCESS (0)。
引導 REG_DWORD 這項功能不應該在偵錯案例之外使用。
如果此登錄機碼設定為 1,則自動記錄器會在核心初始化期間早於正常啟動,以在初始化許多重要核心子系統期間擷取事件。 不過, 啟用此選項會對開機時間 產生負面影響,並對自動記錄器施加額外的限制。 如果啟用此功能,則必須填入自動記錄程式會話 GUID,而且許多其他自動記錄工具設定可能無法運作。
Windows Server 2022 和更新版本支援此密鑰。

下表描述您可以針對您想要啟用會話的每個提供者所定義的值。 您必須具有系統管理員許可權,才能指定這些登錄值。 如果您指定 ETW 不支援的值,ETW 將會覆寫此值。

類型 描述
已啟用 REG_DWORD 判斷提供者是否已啟用。 若要啟用提供者,請將此值設定為 1。 若要停用提供者,請將此值設定為 0。 預設值是 0。
EnableFlags REG_DWORD 提供者定義的值,指定提供者產生事件的事件類別。 如需詳細資訊,請參閱 EnableTrace 函式的 EnableFlags 參數。 如果提供者不支援 MatchAnyKeyword 或 MatchAllKeyword,請指定這個值名稱。
EnableLevel REG_DWORD 提供者定義的值,指定事件中包含的詳細數據層級。 例如,您可以使用此值來指出提供者產生的事件嚴重性層級(資訊、警告、錯誤)。 如需預先定義的層級清單,請參閱 EnableTraceEx 函式的 level 參數。
EnableProperty REG_DWORD 使用此值在記錄檔中包含下列一或多個專案:
  • EVENT_ENABLE_PROPERTY_SID (0x00000001) = 將使用者的安全性識別碼 (SID) 包含在擴充數據中。
  • EVENT_ENABLE_PROPERTY_TS_ID (0x00000002) = 包含在終端機會話識別碼的擴充數據中。
  • EVENT_ENABLE_PROPERTY_STACK_TRACE (0x00000004) = 在擴充數據中包含使用 EventWrite 寫入之事件的呼叫堆疊追蹤。
  • EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0 (0x00000010) = 篩選出未指定非零關鍵詞的所有事件。
  • EVENT_ENABLE_PROPERTY_PROVIDER_GROUP (0x00000020) = 指出對 EnableTraceEx2 的呼叫應該啟用提供者群組,而不是個別的事件提供者。
  • EVENT_ENABLE_PROPERTY_PROCESS_START_KEY (0x00000080) = 在延伸資料中包含行程啟動金鑰。
  • EVENT_ENABLE_PROPERTY_EVENT_KEY (0x00000100) = 在擴充數據中包含事件索引鍵。
  • EVENT_ENABLE_PROPERTY_EXCLUDE_INPRIVATE (0x00000200) = 篩選出標示為 InPrivate 事件或來自標示為 InPrivate 的進程的所有事件。
如需這些專案的詳細資訊,請參閱 ENABLE_TRACE_PARAMETERS 結構的 EnableProperty
MatchAnyKeyword REG_QWORD 關鍵詞的位掩碼,可決定您想要提供者寫入的事件類別。 如果事件的任何關鍵詞位符合此遮罩中設定的任何位,提供者會寫入事件。 若要指定提供者寫入所有事件,請將此值設定為零。 如需範例,請參閱 EnableTraceEx 函式的一節。
MatchAllKeyword REG_QWORD 此位掩碼是選擇性的。 此遮罩會進一步限制您想要提供者寫入的事件類別。 如果事件的關鍵詞符合 MatchAnyKeyword 條件,則提供者只有在事件關鍵詞中存在此遮罩中的所有位時,才會寫入事件。 如果 MatchAnyKeyword 為零,則不會使用此遮罩。 如需範例,請參閱 EnableTraceEx 函式的一節。

修改登錄之後,下次重新啟動計算機時,就會啟動 AutoLogger 工作階段。 AutoLogger 會話會呼叫 EnableTraceEx 函式來啟用提供者。

AutoLogger 會話會增加系統開機時間,而且應該謹慎使用。 想要在開機程式期間擷取資訊的服務應考慮將控制器邏輯新增至本身,而不是使用 AutoLogger 會話。

若要停止 AutoLogger 工作階段,請呼叫 ControlTrace 函式。 您傳遞給函式的工作階段名稱是您用來在登入中定義工作階段的登入機碼名稱。

如需啟動事件追蹤會話的詳細資訊,請參閱 設定和啟動事件追蹤會話

如需啟動私人記錄器會話的詳細資訊,請參閱 設定和啟動私人記錄器會話

如需啟動NT核心記錄器會話的詳細資訊,請參閱 設定和啟動NT核心記錄器會話

設定和啟動私人記錄器會話

設定和啟動 SystemTraceProvider 工作階段

設定和啟動事件追蹤會話

設定和啟動NT核心記錄器會話

EnableTraceEx2

ENABLE_TRACE_PARAMETERS

EVENT_FILTER_DESCRIPTOR

PAYLOAD_FILTER_PREDICATE

TdhAggregatePayloadFilters

TdhCreatePayloadFilter

更新事件追蹤會話