共用方式為


提供者特性

提供者特性是將更多數據附加至個別提供者註冊的方法。 它們可用於以指令清單為基礎的或 TraceLogging 提供者。 這目前包含將提供者名稱和/或提供者群組新增至個別提供者註冊的支援。 未來可能會新增更多特性類型。 此資訊會以一組格式的二進位 Blob 的形式儲存在核心中。

Traits 只能針對註冊設定一次。 任何進一步嘗試在該註冊上設定特性都會失敗。

若要在指令清單型提供者上設定 Provider Traits,請使用 EventProviderSetTraits 資訊類別呼叫 EventSetInformation 函式。 EventInformation 緩衝區應該包含下列格式的二進位 Blob:

{
   UINT16 TraitsSize   // Total size of the traits including this field
   CHAR[] ProviderName // Null terminated utf-8 provider name
   TRAIT[] Traits      // Zero or more individual traits
}

個別特性的格式應如下:

TRAIT {
      UINT16 TraitSize // Size of this individual trait including this field
      UINT8 Type       // ETW_PROVIDER_TRAIT_TYPE
      BYTE[] Data
      }

從個別特徵,ETW_PROVIDER_TRAIT_TYPE定義為:

typedef enum {
    EtwProviderTraitTypeGroup = 1,
    EtwProviderTraitTypeMax
} ETW_PROVIDER_TRAIT_TYPE;

呼叫 TraceLoggingRegister 函式時,TraceLogging 提供者會自動設定 Provider Traits。 TraceLogging 提供者的名稱一律會包含在其特性中。 您可以使用提供者定義中的 TraceLoggingOptionGroup 巨集,在 TraceLogging 提供者上設定群組。

自定義特性

雖然尚未定義 255 個可能特徵類型的大部分,但特性類型 1-127 會保留給定義Microsoft。 其餘較高的索引型別值可供外部開發人員視需要使用。 考慮將自己的自定義特性新增至提供者的任何人,都應該嘗試保留其總特性大小低於 256 個字節,原因如下:

  • 特性會包含在針對提供者所撰寫的每個事件中。 大型特性可能會導致非常大的記錄檔。
  • 特性會儲存在提供者存留期的非分頁核心集區中。

提供者群組

提供者群組是 GUID 定義的可控制實體,非常類似提供者本身。 主要差異在於,雖然提供者 GUID 用來控制其提供者的註冊,但群組會控制其所有成員註冊。 例如,使用指定的關鍵詞和層級啟用提供者群組,將會啟用使用該關鍵詞和層級的所有群組成員註冊。

群組成員資格可能會受到許可權限制。 如果 EventSetInformation 的呼叫者 沒有加入指定群組的許可權,則會拒絕成員資格。

在某些情況下,追蹤會話控制器可能會想要從群組的啟用中排除一些提供者。 您可以藉由設定不允許的清單來完成此動作。 不允許清單是提供者 GUID 清單,不會根據單一記錄會話的群組設定來啟用。 您可以使用 TraceSetInformation 和 TraceSetDisallowList 資訊類別,動態變更不允許清單。

雖然大部分的啟用動作都可以以與個別提供者類似的方式對提供者群組執行,但有一些例外狀況。 例外狀況包括:

  • 提供者群組無法由私人追蹤會話控制。
  • 事件名稱、事件標識碼和承載篩選器不適用於提供者群組,因為它們假設個別提供者的特定資訊。