Anbietermerkmale

Anbietermerkmale sind eine Methode zum Anfügen weiterer Daten an eine einzelne Anbieterregistrierung. Sie können für manifestbasierte oder TraceLogging-Anbieter verwendet werden. Dies umfasst derzeit Unterstützung für das Hinzufügen eines Anbieternamens und/oder einer Anbietergruppe zu einer einzelnen Anbieterregistrierung. In Zukunft werden wahrscheinlich weitere Merkmalstypen hinzugefügt. Diese Informationen werden im Kernel als binäres Blob eines festgelegten Formats gespeichert.

Merkmale können nur einmal für eine Registrierung festgelegt werden. Alle weiteren Versuche, die Merkmale für diese Registrierung festzulegen, schlagen fehl.

Um Anbietermerkmale für einen manifestbasierten Anbieter festzulegen, rufen Sie die EventSetInformation-Funktion mit der EventProviderSetTraits-Informationsklasse auf. Der EventInformation-Puffer sollte ein binäres Blob im folgenden Format enthalten:

{
   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
}

Einzelne Merkmale sollten das folgende Format aufweisen:

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

Aus dem einzelnen Merkmal wird ETW_PROVIDER_TRAIT_TYPE wie folgt definiert:

typedef enum {
    EtwProviderTraitTypeGroup = 1,
    EtwProviderTraitTypeMax
} ETW_PROVIDER_TRAIT_TYPE;

TraceLogging-Anbieter legen die Anbietermerkmale automatisch fest, wenn die TraceLoggingRegister-Funktion aufgerufen wird. Der Name des TraceLogging-Anbieters wird immer in seinen Merkmalen enthalten sein. Eine Gruppe kann für einen TraceLogging-Anbieter mithilfe des TraceLoggingOptionGroup-Makros in der Anbieterdefinition festgelegt werden.

Benutzerdefinierte Merkmale

Obwohl die meisten der 255 möglichen Merkmalstypen noch nicht definiert sind, sind die Merkmalstypen 1-127 für die Definition durch Microsoft reserviert. Die verbleibenden höheren indizierten Typwerte können von externen Entwicklern nach Bedarf verwendet werden. Jeder, der erwägt, dem Anbieter eigene benutzerdefinierte Merkmale hinzuzufügen, sollte aus den folgenden Gründen versuchen, seine Gesamteigenschaftsgröße unter 256 Bytes zu halten:

  • Die Merkmale sind in jedem Für den Anbieter geschriebenen Ereignis enthalten. Große Merkmale können zu sehr großen Protokolldateien führen.
  • Die Merkmale werden für die Lebensdauer des Anbieters in einem nicht ausgelagerten Kernelpool gespeichert.

Anbietergruppen

Eine Anbietergruppe ist eine GUID-definierte steuerbare Entität, ähnlich wie ein Anbieter selbst. Der Hauptunterschied besteht darin, dass eine Anbieter-GUID verwendet wird, um Registrierungen nur des Anbieters zu steuern, eine Gruppe alle ihre Mitgliedsregistrierungen steuert. Wenn Sie beispielsweise eine Anbietergruppe mit einem bestimmten Schlüsselwort (keyword) und einer bestimmten Ebene aktivieren, werden alle Gruppenmitgliedsregistrierungen mit dieser Schlüsselwort (keyword) und Ebene aktiviert.

Die Gruppenmitgliedschaft kann durch Berechtigungen eingeschränkt werden. Wenn der Aufrufer von EventSetInformation nicht über die Berechtigung verfügt, der angegebenen Gruppe beizutreten, wird die Mitgliedschaft verweigert.

In einigen Fällen möchte der Ablaufverfolgungssitzungscontroller möglicherweise einige Anbieter von der Aktivierung einer Gruppe ausschließen. Dies kann durch Festlegen einer Nicht zulassen-Liste erfolgen. Eine Nicht zulassen-Liste ist eine Liste von Anbieter-GUIDs, die basierend auf den Gruppeneinstellungen für eine einzelne Protokollierungssitzung nicht aktiviert werden. Disallow-Listen können dynamisch mit TraceSetInformation und der TraceSetDisallowList-Informationsklasse geändert werden.

Während die meisten Aktivierungsaktionen für Anbietergruppen auf ähnliche Weise wie einzelne Anbieter ausgeführt werden können, gibt es einige Ausnahmen. Zu den Ausnahmen zählen:

  • Anbietergruppen können nicht durch private Ablaufverfolgungssitzungen gesteuert werden.
  • Die Filter "Ereignisname", "Ereignis-ID" und "Nutzlast" gelten nicht für Anbietergruppen, da sie bestimmte Informationen eines einzelnen Anbieters annehmen.