Tratti del provider

I tratti del provider sono un metodo per collegare più dati a una singola registrazione del provider. Possono essere usati per i provider di manifesto o TraceLogging. Questo include attualmente il supporto per l'aggiunta di un nome provider e/o di un gruppo di provider a una singola registrazione del provider. È probabile che in futuro vengano aggiunti altri tipi di tratti. 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 su tale registrazione avranno esito negativo.

Per impostare i tratti del provider in un provider basato su manifesto, chiamare la funzione EventSetInformation con la classe di informazioni EventProviderSetTraits. Il buffer EventInformation deve contenere un BLOB binario del 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 singolo tratto, ETW_PROVIDER_TRAIT_TYPE è definito come:

typedef enum {
    EtwProviderTraitTypeGroup = 1,
    EtwProviderTraitTypeMax
} ETW_PROVIDER_TRAIT_TYPE;

I provider traceLogging impostano automaticamente i tratti del provider quando viene chiamata la funzione TraceLoggingRegister . Il nome del provider TraceLogging verrà sempre incluso nei suoi 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 possibili tipi di tratti non siano ancora definiti, i tipi di caratteristica 1-127 sono riservati per la definizione da Microsoft. I valori di tipo indicizzati rimanenti rimanenti possono essere usati dagli sviluppatori esterni in base alla loro adattabilità. Chiunque consideri l'aggiunta di tratti personalizzati al proprio provider dovrebbe provare a mantenere la dimensione totale dei tratti sotto 256 byte per i motivi seguenti:

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

Gruppi di provider

Un gruppo di provider è un'entità controllabile definita dal GUID molto simile a un provider stesso. La differenza chiave è che, mentre un GUID del provider viene usato per controllare le registrazioni del proprio provider, un gruppo controlla tutte le registrazioni membro. Ad esempio, l'abilitazione di un gruppo di provider con una parola chiave e un livello specificato 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 può voler escludere alcuni provider dal relativo 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 verrà abilitato in base alle impostazioni di gruppo per una singola sessione di registrazione. Gli elenchi non consentiti possono essere modificati dinamicamente 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 sono le seguenti:

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