Condividi tramite


Tratti del provider

I tratti del provider sono un metodo per associare più dati a una registrazione a un singolo provider. Possono essere usati per i provider basati su manifesto o TraceLogging. Questo include attualmente il supporto per l'aggiunta di un nome provider e/o di un gruppo di provider a una registrazione a un singolo provider. È probabile che in futuro vengano aggiunti più tipi di tratto. Queste informazioni vengono archiviate nel kernel come BLOB binario di un formato set.

I tratti possono essere impostati una sola volta per una registrazione. Eventuali ulteriori tentativi di impostare i tratti in tale registrazione avranno esito negativo.

Per impostare Tratti provider in un provider basato su manifesto, chiamare la funzioneEventSetInformationcon la classe di informazioni EventProviderSetTraits. Il buffer EventInformation deve contenere un BLOB binario con il formato seguente:

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

I singoli tratti devono essere nel formato seguente:

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

Dal tratto individuale, ETW_PROVIDER_TRAIT_TYPE è definito come:

typedef enum {
    EtwProviderTraitTypeGroup = 1,
    EtwProviderTraitTypeMax
} ETW_PROVIDER_TRAIT_TYPE;

I provider TraceLogging impostano automaticamente i tratti provider quando viene chiamata la funzione TraceLoggingRegisterRegister. Il nome del provider TraceLogging verrà sempre incluso nei tratti. Un gruppo può essere impostato in un provider TraceLogging usando la macro TraceLoggingOptionGroup nella definizione del provider.

Tratti personalizzati

Sebbene la maggior parte dei 255 tipi di tratto possibili non sia ancora definita, i tipi di tratto 1-127 sono riservati per la definizione da Parte di Microsoft. I valori dei tipi indicizzati rimanenti superiori possono essere usati dagli sviluppatori esterni in base alle esigenze. Chiunque consideri l'aggiunta di tratti personalizzati al provider deve provare a mantenere la dimensione totale del tratto inferiore a 256 byte per i motivi seguenti:

  • I tratti sono inclusi in ogni evento scritto per il provider. Tratti di grandi dimensioni possono portare a file di log molto grandi.
  • I tratti vengono archiviati nel pool di kernel non di paging per la durata del provider.

Gruppi di provider

Un gruppo di provider è un'entità controllabile definita dal GUID in modo molto simile a un provider stesso. La differenza principale è che mentre un GUID del provider viene usato per controllare le registrazioni del proprio provider, un gruppo controlla tutte le registrazioni dei membri. Ad esempio, l'abilitazione di un gruppo di provider con una parola chiave e un livello specificati consentirà tutte le registrazioni dei membri dei gruppi con tale parola chiave e livello.

L'appartenenza al gruppo può essere limitata dalle autorizzazioni. Se il chiamante di EventSetInformation non dispone delle autorizzazioni per partecipare al gruppo specificato, l'appartenenza verrà negata.

In alcuni casi, il controller di sessione di traccia potrebbe voler escludere alcuni provider dall'abilitazione di un gruppo. Questa operazione può essere eseguita impostando un elenco non consentito. Un elenco non consentito è un elenco di GUID del provider che non verranno abilitati in base alle impostazioni del gruppo per una singola sessione di registrazione. Gli elenchi non consentiti possono essere modificati in modo dinamico con TraceSetInformation e la classe di informazioni TraceSetDisallowList.

Anche se la maggior parte delle azioni di abilitazione può essere eseguita per i gruppi di provider in modo analogo ai singoli provider, esistono alcune eccezioni. Le eccezioni includono:

  • I gruppi di provider non possono essere controllati da sessioni di traccia private.
  • I filtri Nome evento, ID evento e Payload non sono applicabili ai gruppi di provider perché presuppongono informazioni specifiche di un singolo provider.