Rasgos del proveedor

Los rasgos del proveedor son un método para adjuntar más datos a un registro de proveedor individual. Se pueden usar para proveedores basados en manifiestos o TraceLogging. Actualmente se incluye compatibilidad para agregar un nombre de proveedor o un grupo de proveedores a un registro de proveedor individual. Es probable que se agreguen más tipos de rasgos en el futuro. Esta información se almacena en el kernel como un blob binario de un formato set.

Los rasgos solo se pueden establecer una vez para un registro. Se producirá un error en cualquier intento adicional de establecer los rasgos en ese registro.

Para establecer Provider Traits en un proveedor basado en manifiestos, llame a la función EventSetInformation con la clase de información EventProviderSetTraits. El búfer EventInformation debe contener un blob binario con el siguiente 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
}

Los rasgos individuales deben tener el siguiente formato:

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

A partir del rasgo individual, ETW_PROVIDER_TRAIT_TYPE se define como:

typedef enum {
    EtwProviderTraitTypeGroup = 1,
    EtwProviderTraitTypeMax
} ETW_PROVIDER_TRAIT_TYPE;

Los proveedores de TraceLogging establecen automáticamente los rasgos del proveedor cuando se llama a la función TraceLoggingRegister . El nombre del proveedor traceLogging siempre se incluirá en sus rasgos. Un grupo se puede establecer en un proveedor traceLogging mediante la macro TraceLoggingOptionGroup en la definición del proveedor.

Rasgos personalizados

Aunque la mayoría de los 255 tipos de rasgos posibles aún no están definidos, microsoft reserva los tipos de rasgos 1-127. Los desarrolladores externos pueden usar los valores de tipo indizado más altos que los desarrolladores externos a medida que se ajusten. Cualquier persona que considere la posibilidad de agregar sus propios rasgos personalizados a su proveedor debe intentar mantener su tamaño total de rasgo inferior a 256 bytes por los siguientes motivos:

  • Los rasgos se incluyen en todos los eventos escritos para el proveedor. Los rasgos grandes podrían dar lugar a archivos de registro muy grandes.
  • Los rasgos se almacenan en un grupo de kernels no paginado durante la vigencia del proveedor.

Grupos de proveedores

Un grupo de proveedores es una entidad controlable definida por GUID de forma muy similar a un proveedor en sí. La diferencia clave es que, mientras que un GUID de proveedor se usa para controlar solo los registros de su proveedor, un grupo controlará todos sus registros de miembros. Por ejemplo, al habilitar un grupo de proveedores con una palabra clave y un nivel determinado, se habilitarán todos los registros de miembros de grupos con esa palabra clave y nivel.

La pertenencia a grupos puede estar restringida por permisos. Si el autor de la llamada de EventSetInformation no tiene permisos para unirse al grupo especificado, se denegará la pertenencia.

En algunos casos, el controlador de sesión de seguimiento puede querer excluir algunos proveedores de su habilitación de un grupo. Esto se puede hacer estableciendo una lista no permitir. Una lista de denegación es una lista de GUID de proveedor que no se habilitarán en función de la configuración del grupo para una sola sesión de registro. Las listas no permitidas se pueden cambiar dinámicamente con TraceSetInformation y la clase de información TraceSetDisallowList.

Aunque la mayoría de las acciones de habilitación se pueden realizar para los grupos de proveedores de forma similar a los proveedores individuales, hay algunas excepciones. Entre las excepciones se incluyen:

  • Los grupos de proveedores no se pueden controlar mediante sesiones de seguimiento privadas.
  • Los filtros Nombre de evento, Id. de evento y Carga no se aplican a los grupos de proveedores, ya que asumen información específica de un proveedor individual.