Calificadores MOF de seguimiento de eventos

Use los calificadores definidos en esta sección al crear la clase MOF del proveedor, la clase MOF de eventos, la clase MOFde tipo de evento y las propiedades de la clase MOF de tipo de evento. Para obtener un ejemplo que incluya algunos de estos calificadores, consulte Publicación del esquema de eventos.

Calificadores de clase MOF del proveedor

En la tabla siguiente se enumeran los calificadores que puede especificar en una clase MOF del proveedor.

Calificador: Tipo de datos Descripción
Guid String Necesario. Guid de cadena que identifica de forma única un proveedor. Por ejemplo, Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}"). Este es el mismo GUID que se usa al llamar a la función RegisterTraceGuids para registrar el proveedor.

 

Calificadores de clase MOF de eventos

En la tabla siguiente se enumeran los calificadores que puede especificar en una clase de evento (la clase primaria que agrupa las clases de tipo de evento relacionadas).

Calificador: Tipo de datos Descripción
Guid String Necesario. Guid de cadena que identifica una clase de eventos. Por ejemplo, Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}"). Los proveedores de eventos usan el GUID para establecer el EVENT_TRACE_HEADER. Miembro GUID , para que los consumidores puedan determinar la clase de eventos que reciben.
EventVersion Entero Este calificador es opcional para la versión más reciente de una clase de seguimiento de eventos y es necesario para todas las versiones anteriores de la clase. La versión más reciente de la clase no especifica el calificador EventVersion o tiene el número de versión más alto. Los números de versión comienzan por 0, por ejemplo, EventVersion(0). Normalmente, al crear una nueva versión de la clase, también cambia el nombre de la versión anterior a <classname>_Vn, donde n es un número incremental a partir de 0. Para obtener un ejemplo, vea FileIo y FileIo_V0.

 

Calificadores de clase MOF de tipo de evento

En la tabla siguiente se enumeran los calificadores que puede especificar en una clase de tipo de evento (la clase que define los datos de la propiedad de evento).

Calificador: Value Descripción
EventType Entero Necesario. Identifica la clase de tipo de evento. Por ejemplo, EventType(1). El proveedor de eventos usa el mismo valor de tipo de evento para establecer EVENT_TRACE_HEADER. Class.Type. Si se usa la misma clase MOF para varios tipos de eventos (porque usan los mismos datos de eventos), especifique el valor del tipo de evento como una matriz de enteros, por ejemplo, EventType{12,15}.
EventTypeName String Opcional. Describe el tipo de evento. Por ejemplo, EventTypeName("Start"). Si se usa la misma clase MOF para varios tipos de eventos (porque usan los mismos datos de eventos), especifique el valor del nombre del tipo de evento como una matriz de cadenas, por ejemplo, EventTypeName{"Start", "End"}. Los elementos de la matriz EventTypeName corresponden directamente a la matriz EventType.

 

Calificadores de propiedad

En la tabla siguiente se enumeran los calificadores que puede especificar en una propiedad .

Calificador: Descripción
Bits Especifica las posiciones de bits que se asignan a los valores de cadena. Si especifica este calificador, también debe especificar el calificador BitValues .
BitValues Valores de cadena. Si también se especifica el calificador BitMap , las cadenas corresponden directamente a los valores del calificador BitMap . De lo contrario, supongamos que el valor de la propiedad es un índice basado en uno en las cadenas de valor (bit uno corresponde a la primera cadena de la lista).
Extensión Proporciona información adicional sobre cómo consumir (interpretar) los datos. El valor de extensión no distingue mayúsculas de minúsculas. Incluya el valor entre comillas, por ejemplo, Extension("Guid"). Los valores de extensión posibles son:
Guid
Indica que los datos de propiedad son guid. El tipo de datos MOF debe ser object. Se espera que la carga sea una estructura GUID .
IPAddr e IPAddrV4
Los datos son una dirección IP V4. El tipo de datos MOF debe ser object. Se espera que la carga sea un long sin signo. Cada byte del long sin signo representa una de las cuatro partes de la dirección IP (p1.p2.p3.p4). El byte de orden bajo contiene el valor de p1, el siguiente byte contiene el valor de p2, etc.
Antes de Windows Vista: No se admite la extensión IPAddrV4.
IPAddrV6
Los datos son una dirección IP V6. El tipo de datos MOF debe ser object. Se espera que la carga sea una estructura IN6_ADDR .
Antes de Windows Vista: No se admite la extensión IPAddrV6.
NoPrint
Indica que el consumidor no debe imprimir estos datos.
Puerto
Los datos identifican un número de puerto. El tipo de datos MOF debe ser object. Se espera que la carga sea un short sin signo.
RString
Los caracteres de nueva línea se reemplazaron por espacios. Se espera que la carga sea una cadena ANSI terminada en null.
RWString
Los caracteres de nueva línea se reemplazaron por espacios. Se espera que la carga sea una cadena de caracteres anchos terminada en null.
Sid
Los datos representan un SID de blob binario. El tipo de datos MOF debe ser object.
El SID tiene una longitud variable. El valor contenido en los primeros 4 bytes (ULONG) indica si el blob contiene un SID. Si los primeros 4 bytes (ULONG) del blob no son cero, el blob contiene un SID. La primera parte del blob contiene el TOKEN_USER (la estructura se alinea en un límite de 8 bytes) y la segunda parte contiene el SID. Para abordar la parte del SID del blob:
  • Establecer un puntero de bytes al principio del blob
  • Multiplique el tamaño del puntero para el registro de eventos en 2 y agregue el producto al puntero de bytes (el miembro PointerSize de TRACE_LOGFILE_HEADER contiene el valor de tamaño del puntero).

Puede usar la siguiente macro para determinar la longitud del SID.
#define SeLengthSid( Sid ) \
  (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
SizeT
Indica que la propiedad contiene un valor de puntero. El tamaño del valor de puntero depende del sistema operativo utilizado para registrar el evento; la carga contendrá un valor de 4 bytes para sistemas de 32 bits o un valor de 8 bytes para sistemas de 64 bits. El tipo de datos MOF debe ser object.
Los consumidores deben omitir el tipo de datos y el calificador format si la propiedad incluye la extensión SizeT . Para determinar el tamaño de los datos que se van a leer para la propiedad, use:
Antes de Windows Vista: Es posible que el valor PointerSize no sea preciso. Por ejemplo, en un equipo de 64 bits, una aplicación de 32 bits registrará punteros de 4 bytes; Sin embargo, la sesión establecerá PointerSize en 8.
Variante
Los datos representan un blob. Los cuatro primeros bytes (uint32) indican el tamaño del blob. El tipo de datos MOF debe ser object.
WmiTime
Traduce la marca de tiempo a la hora del sistema. El tipo de datos MOF debe ser object. Se espera que la carga sea un entero de 64 bits sin signo.
Antes de Windows Vista: No disponible.
Formato Define el formato de los datos de propiedad. Por ejemplo, incluir Format("w") en una propiedad de cadena indica que la cadena es una cadena ancha. Los valores posibles son:
Término Descripción
C
Muestra el valor de la propiedad como un carácter ASCII. Puede usar este calificador con tipos de datos uint8 .
s
Trate la matriz de caracteres como una cadena terminada en null. La cadena es una cadena de caracteres anchos si el tipo de datos es char16; de lo contrario, la cadena es una cadena de caracteres ASCII.
W
El valor de la propiedad es una cadena de caracteres anchos. Puede usar este calificador con tipos de datos de cadena .
x
Muestra el valor de la propiedad como un número hexadecimal. Puede usar este calificador con tipos de datos enteros de 16, 32 y 64 bits.

 

Puntero

Indica que la propiedad contiene un valor de puntero. El tamaño del valor de puntero depende del sistema operativo utilizado para registrar el evento; la carga contendrá un valor de 4 bytes para sistemas de 32 bits o un valor de 8 bytes para sistemas de 64 bits. El tipo de datos MOF debe ser object.

Los consumidores deben omitir el tipo de datos y el calificador format si la propiedad incluye la extensión SizeT . Para determinar el tamaño de los datos que se van a leer para la propiedad, use:

Antes de Windows Vista: Es posible que el valor PointerSize no sea preciso. Por ejemplo, en un equipo de 64 bits, una aplicación de 32 bits registrará punteros de 4 bytes; Sin embargo, la sesión establecerá PointerSize en 8.

Tenga en cuenta que algunos eventos usan PointerType en lugar de Pointer; no use PointerType.

StringTermination Indica cómo finaliza la propiedad de cadena. Por ejemplo, StringTermination("NullTerminated") indica que la propiedad de cadena está terminada en null. Los valores posibles son:
Contado

La longitud de la cadena se incrusta al principio de la cadena como un valor de USHORT .

NotCounted

La cadena no termina en null y la longitud de la cadena no está incrustada al principio de la cadena. En este caso, la cadena debe ser el último elemento y ocupar todo el espacio al final de los datos del evento.

NullTerminated

La cadena termina en null. Si no especifica el calificador StringTermination , se supone que la cadena está terminada en null.

ReverseCounted

La longitud de la cadena se incrusta al principio de la cadena como un valor de USHORT en formato big-endian.

ValueDescriptions Proporciona descripciones para cada valor del calificador Valores . Las funciones TdhEnumerateProviderFieldInformation y TdhQueryProviderFieldInformation devuelven estas descripciones al intentar recuperar información de nivel y palabra clave. Las descripciones son opcionales. Si no proporciona las descripciones, las funciones devuelven NULL. Consulte Especificación de los valores de nivel y habilitación de marcas para un proveedor para obtener más detalles.
ValueMap Especifica el índice entero o los valores de marca que se asignan a los valores de cadena. Si especifica este calificador, también debe especificar el calificador Values y, opcionalmente, el calificador ValueType . Tenga en cuenta que ETW no admite la opción WMI de tener cadenas para los valores de mapa de valores.

En el ejemplo siguiente se muestra cómo usar los calificadores ValueMap, Values y ValueType.

ValueType("flag"),
ValueMap {"0x01", "0x02", "0x04", "0x08"},
Values {"ValueMapFlag1", "ValueMapFlag2", "ValueMapFlag4", "ValueMapFlag8"}]
Valores Valores de cadena. Si también se especifica el calificador ValueMap , las cadenas corresponden directamente a los valores del calificador ValueMap . De lo contrario, supongamos que el valor de la propiedad es un índice de base cero en las cadenas de valor.
ValueType Indica si los valores valueMap son valores de índice entero o valores de marca de bits. Si no especifica este calificador, se asumen los valores de índice entero. Para especificar que los valores son valores de índice entero, use ValueType("index"). Para especificar que los valores son valores de marca de bits, use ValueType("flag").
WmiDataId Cada propiedad debe contener el calificador WmiDataId . WmiDataId define el orden en el que el consumidor lee los datos del evento. El valor de WmiDataId comienza en 1 e incrementa para cada propiedad de la clase . Por ejemplo, WmiDataId(1).
XMLFragment Indica que los datos están en formato XML y listos para mostrarse sin formato adicional.

 

Especificación de los valores de nivel y habilitación de marcas para un proveedor

Para documentar el nivel y habilitar las marcas que un controlador usaría para habilitar el proveedor, incluya las propiedades "Level" y "Flags" en la clase MOF del proveedor. Los nombres de propiedad Level y Flags distinguen mayúsculas de minúsculas. Las propiedades deben incluir los calificadores Values y ValueMap , que especifican el nivel posible y habilitan los valores de marca. ValueMap para los valores de marca de habilitación deben ser valores de bit (marca). El calificador ValueDescriptions es opcional, pero debe usarlo para proporcionar descripciones para cada valor posible. Las descripciones se usan cuando alguien llama a las funciones TdhEnumerateProviderFieldInformation y TdhQueryProviderFieldInformation para obtener el nivel posible y habilitar los valores de marcas (palabras clave) para el proveedor.

A continuación se muestra una clase de proveedor que especifica el nivel posible y habilita los valores de marcas.

[Dynamic,
 Description("IIS_Trace") : amended,
 guid("{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"),
 locale("MS\\0x409")]
class IIS_Trace : EventTrace
{
    [Description ("Enable Flags") : amended,
        ValueDescriptions{
             "Allow_tracing_only_selected_requests ",
             "IIS_authentication_events ",
             "IIS_security_events ",
             "IIS_filter_events ",
             "IIS_static_file_events ",
             "IIS_CGI_events ",
             "IIS_compression_events ",
             "IIS_cache_events ",
             "IIS_request_notifications_events ",
             "IIS_module_events ",
             "IIS_FastCGI_events "},
        DefineValues{
             "UseUrlFilter",
             "IISAuthentication",
             "IISSecurity",
             "IISFilter",
             "IISStaticFile",
             "IISCGI",
             "IISCompression",
             "IISCache",
             "IISRequestNotification",
             "IISModule",
             "IISFastCGI"},
        Values{
             "UseUrlFilter",
             "IISAuthentication",
             "IISSecurity",
             "IISFilter",
             "IISStaticFile",
             "IISCGI",
             "IISCompression",
             "IISCache",
             "IISRequestNotification",
             "IISModule",
             "IISFastCGI"},
        ValueMap{
             "0x00000001",
             "0x00000002",
             "0x00000004",
             "0x00000008",
             "0x00000010",
             "0x00000020",
             "0x00000040",
             "0x00000080",
             "0x00000100",
             "0x00000200",
             "0x00001000"}: amended
    ]
    uint32 Flags;

    [Description ("Levels") : amended,
        ValueDescriptions{
            "Abnormal exit or termination",
            "Severe errors that need logging",
            "Warnings such as allocation failure",
            "Includes non-error cases",
            "Detailed traces from intermediate steps" } : amended,
         DefineValues{
            "TRACE_LEVEL_FATAL",
            "TRACE_LEVEL_ERROR",
            "TRACE_LEVEL_WARNING"
            "TRACE_LEVEL_INFORMATION",
            "TRACE_LEVEL_VERBOSE" },
        Values{
            "Fatal",
            "Error",
            "Warning",
            "Information",
            "Verbose" },
        ValueMap{
            "0x1",
            "0x2",
            "0x3",
            "0x4",
            "0x5" },
        ValueType("index")
    ]
    uint32 Level;
};