提供者特性

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

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

若要在以資訊清單為基礎的提供者上設定 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 函式時,TraceLoggingRegister 提供者會自動設定 Provider Traits。 TraceLogging 提供者的名稱一律會包含在其特性中。 您可以使用提供者定義中的 TraceLoggingOptionGroup 宏,在 TraceLogging 提供者上設定群組。

自訂特性

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

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

提供者群組

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

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

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

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

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