Características do provedor

As Características do Provedor são um método de anexar mais dados a um registro de provedor individual. Eles podem ser usados para provedores baseados em manifesto ou TraceLogging. Atualmente, isso inclui suporte para adicionar um Nome do Provedor e/ou Grupo de Provedores a um registro de provedor individual. É provável que mais tipos de característica sejam adicionados no futuro. Essas informações são armazenadas no kernel como um blob binário de um formato de conjunto.

As características só podem ser definidas uma vez para um registro. Qualquer outra tentativa de definir as características nesse registro falhará.

Para definir As Características do Provedor em um provedor baseado em manifesto, chame a função EventSetInformation com a classe de informações EventProviderSetTraits. O buffer EventInformation deve conter um blob binário do seguinte formato:

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

As características individuais devem estar no seguinte formato:

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

Da característica individual, ETW_PROVIDER_TRAIT_TYPE é definido como:

typedef enum {
    EtwProviderTraitTypeGroup = 1,
    EtwProviderTraitTypeMax
} ETW_PROVIDER_TRAIT_TYPE;

Os provedores traceLogging definem automaticamente as Características do Provedor quando a função TraceLoggingRegister é chamada. O nome do provedor traceLogging sempre será incluído em suas características. Um grupo pode ser definido em um provedor TraceLogging usando a macro TraceLoggingOptionGroup na definição do provedor.

Características personalizadas

Embora a maioria dos 255 tipos de características possíveis ainda não estejam definidos, os tipos de característica 1-127 são reservados para definição pela Microsoft. Os valores de tipo indexados mais altos restantes podem ser usados por desenvolvedores externos como acharem adequado. Qualquer pessoa que considere adicionar suas próprias características personalizadas ao seu provedor deve tentar manter seu tamanho total de características abaixo de 256 bytes pelos seguintes motivos:

  • As características são incluídas em todos os eventos gravados para o provedor. Características grandes podem levar a arquivos de log muito grandes.
  • As características são armazenadas no pool de kernel nãopagado durante o tempo de vida do provedor.

Grupos de provedores

Um grupo de provedores é uma entidade controlável definida por GUID, assim como um provedor em si. A principal diferença é que, embora um GUID do provedor seja usado para controlar registros apenas de seu provedor, um grupo controlará todos os seus registros de membro. Por exemplo, habilitar um grupo de provedores com um determinado palavra-chave e nível habilitará todos os registros de membros de grupos com esse palavra-chave e nível.

A associação de grupo pode ser restrita por permissões. Se o chamador de EventSetInformation não tiver permissões para ingressar no grupo especificado, a associação será negada.

Em alguns casos, o controlador de sessão de rastreamento pode querer excluir alguns provedores de sua habilitação de um grupo. Isso pode ser feito definindo uma lista de não permissão. Uma lista não permitida é uma lista de GUIDs do provedor que não serão habilitados com base nas configurações de grupo para uma única sessão de registro em log. Listas não permitidas podem ser alteradas dinamicamente com TraceSetInformation e a classe de informações TraceSetDisallowList.

Embora a maioria das ações de habilitação possa ser feita para Grupos de Provedores de maneira semelhante aos provedores individuais, há algumas exceções. As exceções incluem:

  • Os Grupos de Provedores não podem ser controlados por sessões de rastreamento privado.
  • Os filtros Nome do Evento, ID do Evento e Conteúdo não são aplicáveis aos Grupos de Provedores, pois pressupõem informações específicas de um provedor individual.