Partilhar via


Rastreio de Eventos Qualificatórios MOF

Use os qualificadores definidos nesta seção ao criar seu provedor de classe MOF, evento MOF classe, tipo de evento MOF classee as propriedades do tipo de evento MOF classe. Para obter um exemplo que inclui alguns desses qualificadores, consulte Publicando seu esquema de evento.

Qualificadores de classe MOF do provedor

A tabela a seguir lista os qualificadores que você pode especificar em uma classe MOF do provedor.

Eliminatórias Tipo de dados Descrição
Guid String Necessário. String Guid que identifica exclusivamente um provedor. Por exemplo, Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}"). Este é o mesmo GUID que você usa quando chama a funçãoRegisterTraceGuids para registrar seu provedor.

 

Qualificadores da classe MOF do evento

A tabela a seguir lista os qualificadores que você pode especificar em uma classe de evento (a classe pai que agrupa classes de tipo de evento relacionadas).

Eliminatórias Tipo de dados Descrição
Guid String Necessário. String Guid que identifica uma classe de eventos. Por exemplo, Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}"). Os provedores de eventos usam o Guid para definir o EVENT_TRACE_HEADER. Guid membro, para que os consumidores possam determinar a classe de eventos que estão recebendo.
EventVersion inteiro Esse qualificador é opcional para a versão mais recente de uma classe de rastreamento de evento e é necessário para todas as versões mais antigas da classe. A versão mais recente da classe não especifica o qualificador EventVersion ou tem o número de versão mais alto. Os números de versão começam com 0, por exemplo, EventVersion(0). Normalmente, quando você cria uma nova versão da classe, você também renomeia a versão anterior para <>_Vn classname, onde n é um número incremental começando em 0. Para obter um exemplo, consulte FileIo e FileIo_V0.

 

Tipo de evento Qualificadores de classe MOF

A tabela a seguir lista os qualificadores que você pode especificar em uma classe de tipo de evento (a classe que define os dados da propriedade do evento).

Eliminatórias Valor Descrição
EventType inteiro Necessário. Identifica a classe de tipo de evento. Por exemplo, EventType(1). O provedor de eventos usa o mesmo valor de tipo de evento para definir EVENT_TRACE_HEADER. Class.Type. Se a mesma classe MOF for usada para vários tipos de evento (porque eles usam os mesmos dados de evento), especifique o valor do tipo de evento como uma matriz de inteiros, por exemplo, EventType{12,15}.
EventTypeName String Opcional. Descreve o tipo de evento. Por exemplo, EventTypeName("Start"). Se a mesma classe MOF for usada para vários tipos de evento (porque eles usam os mesmos dados de evento), especifique o valor do nome do tipo de evento como uma matriz de cadeias de caracteres, por exemplo, EventTypeName{"Start", "End"}. Os elementos da matriz EventTypeName correspondem diretamente à matriz EventType.

 

Qualificadores de propriedade

A tabela a seguir lista os qualificadores que você pode especificar em uma propriedade.

Eliminatórias Descrição
BitMap Especifica as posições de bit mapeadas para valores de cadeia de caracteres. Se você especificar esse qualificador, também deverá especificar o BitValues qualificador.
BitValues Valores de cadeia de caracteres. Se o qualificador BitMap também for especificado, as cadeias de caracteres corresponderão diretamente aos valores no qualificador BitMap. Caso contrário, suponha que o valor da propriedade é um índice baseado em um nas cadeias de caracteres de valor (o bit um corresponde à primeira cadeia de caracteres na lista).
Extensão Fornece informações adicionais sobre como consumir (interpretar) os dados. O valor da extensão não diferencia maiúsculas de minúsculas. Inclua o valor entre aspas, por exemplo, Extension("Guid"). Os valores de extensão possíveis são:
Guid
Indica que os dados da propriedade são um Guid. O tipo de dados MOF deve ser objeto. Espera-se que a carga útil seja um GUID estrutura.
IPAddr e IPAddrV4
Os dados são um endereço IP V4. O tipo de dados MOF deve ser objeto. Espera-se que a carga útil seja longa e não assinada. Cada byte do longo não assinado representa uma das quatro partes do endereço IP (p1.p2.p3.p4). O byte de ordem baixa contém o valor para p1, o byte seguinte contém o valor para p2 e assim por diante.
Antes do Windows Vista: A extensão IPAddrV4 não é suportada.
IPAddrV6
Os dados são um endereço IP V6. O tipo de dados MOF deve ser objeto. Espera-se que a carga útil seja uma estrutura IN6_ADDR.
Antes do Windows Vista: A extensão IPAddrV6 não é suportada.
NoPrint
Indica que o consumidor não deve imprimir esses dados.
Porto
Os dados identificam um número de porta. O tipo de dados MOF deve ser objeto. Espera-se que a carga útil seja um short não assinado.
RString
Caracteres de nova linha foram substituídos por espaços. Espera-se que a carga útil seja uma cadeia de caracteres ANSI terminada em nulo.
RWString
Caracteres de nova linha foram substituídos por espaços. Espera-se que a carga útil seja uma cadeia de caracteres larga com terminação nula e caracteres largos.
Sid
Os dados representam um SID de blob binário. O tipo de dados MOF deve ser objeto.
O SID é de comprimento variável. O valor contido nos primeiros 4 bytes (ULONG) indica se o blob contém um SID. Se os primeiros 4 bytes (ULONG) do blob for diferente de zero, o blob conterá um SID. A primeira parte do blob contém o TOKEN_USER (a estrutura está alinhada em um limite de 8 bytes) e a segunda parte contém o SID. Para resolver a parte SID do blob:
  • Definir um ponteiro de byte para o início do blob
  • Multiplique o tamanho do ponteiro para o log de eventos por 2 e adicione o produto ao ponteiro de byte (o membro do TRACE_LOGFILE_HEADER PointerSize contém o valor do tamanho do ponteiro)

Você pode usar a macro a seguir para determinar o comprimento do SID.
#define SeLengthSid( Sid ) \
  (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
SizeT
Indica que a propriedade contém um valor de ponteiro. O tamanho do valor do ponteiro depende do sistema operacional usado para registrar o evento; A carga útil conterá um valor de 4 bytes para sistemas de 32 bits ou um valor de 8 bytes para sistemas de 64 bits. O tipo de dados MOF deve ser objeto.
Os consumidores devem ignorar o tipo de dados e qualificador Format se a propriedade incluir a extensão SizeT. Para determinar o tamanho dos dados a serem lidos para a propriedade, use:
Antes do Windows Vista: O valor PointerSize pode não ser preciso. Por exemplo, em um computador de 64 bits, um aplicativo de 32 bits registrará ponteiros de 4 bytes; no entanto, a sessão definirá PointerSize para 8.
Variante
Os dados representam um blob. Os primeiros quatro bytes (uint32) indicam o tamanho do blob. O tipo de dados MOF deve ser objeto.
WmiTime
Traduz o carimbo de data/hora para a hora do sistema. O tipo de dados MOF deve ser objeto. Espera-se que a carga útil seja um inteiro de 64 bits não assinado.
Antes do Windows Vista: Não disponível.
Formato Define o formato dos dados de propriedade. Por exemplo, incluir Format("w") em uma propriedade string indica que a string é uma cadeia de caracteres larga. Os valores possíveis são:
Vigência Descrição
c
Exiba o valor da propriedade como um caractere ASCII. Você pode usar esse qualificador com uint8 tipos de dados.
s
Trate a matriz de caracteres como uma cadeia de caracteres terminada em nulo. A cadeia de caracteres é uma cadeia de caracteres largos se o tipo de dados for char16; caso contrário, a cadeia de caracteres é uma cadeia de caracteres ASCII.
w
O valor da propriedade é uma cadeia de caracteres largos. Você pode usar esse qualificador com cadeia de caracteres tipos de dados.
x
Exiba o valor da propriedade como um número hexadecimal. Você pode usar esse qualificador com tipos de dados inteiros de 16, 32 e 64 bits.

 

Pointer

Indica que a propriedade contém um valor de ponteiro. O tamanho do valor do ponteiro depende do sistema operacional usado para registrar o evento; A carga útil conterá um valor de 4 bytes para sistemas de 32 bits ou um valor de 8 bytes para sistemas de 64 bits. O tipo de dados MOF deve ser objeto.

Os consumidores devem ignorar o tipo de dados e qualificador Format se a propriedade incluir a extensão SizeT. Para determinar o tamanho dos dados a serem lidos para a propriedade, use:

Antes do Windows Vista: O valor PointerSize pode não ser preciso. Por exemplo, em um computador de 64 bits, um aplicativo de 32 bits registrará ponteiros de 4 bytes; no entanto, a sessão definirá PointerSize para 8.

Observe que alguns eventos usam PointerType em vez de Pointer; não utilize PointerType.

StringTermination Indica como a propriedade string é encerrada. Por exemplo, StringTermination("NullTerminated") indica que a propriedade string é null-terminated. Os valores possíveis são:
Contou

O comprimento da cadeia de caracteres é incorporado no início da cadeia de caracteres como um valor de USHORT.

NotCount

A cadeia de caracteres não é terminada em nulo e o comprimento da cadeia de caracteres não é incorporado no início da cadeia de caracteres. Nesse caso, a cadeia de caracteres deve ser o último elemento e ocupar todo o espaço até o final dos dados do evento.

NullTerminated

A cadeia de caracteres é terminada em nulo. Se você não especificar o qualificador StringTermination, a cadeia de caracteres será considerada terminada em nulo.

ReverseCount

O comprimento da cadeia de caracteres é incorporado no início da cadeia de caracteres como um valor de USHORT no formato big-endian.

ValueDescriptions Fornece descrições para cada valor no qualificador Valores. As funções TdhEnumerateProviderFieldInformation e funções de TdhQueryProviderFieldInformation retornam essas descrições quando você tenta recuperar informações de palavra-chave e nível. As descrições são opcionais. Se você não fornecer as descrições, as funções retornarão NULL. Consulte Especificando valores de nível e habilitar sinalizadores para um provedor para obter mais detalhes.
ValueMap Especifica o índice inteiro ou os valores de sinalizador que são mapeados para valores de cadeia de caracteres. Se você especificar esse qualificador, também deverá especificar os Valores qualificador e, opcionalmente, o qualificador ValueType. Observe que o ETW não suporta a opção WMI de ter cadeias de caracteres para valores de mapa de valor.

O exemplo a seguir mostra como usar os qualificadores ValueMap, Values e ValueType.

ValueType("flag"),
ValueMap {"0x01", "0x02", "0x04", "0x08"},
Values {"ValueMapFlag1", "ValueMapFlag2", "ValueMapFlag4", "ValueMapFlag8"}]
Valores Valores de cadeia de caracteres. Se o qualificador ValueMap também for especificado, as cadeias de caracteres corresponderão diretamente aos valores no qualificador ValueMap. Caso contrário, suponha que o valor da propriedade é um índice baseado em zero nas cadeias de caracteres de valor.
ValueType Indica se os valores ValueMap são valores de índice inteiro ou valores de sinalizador de bits. Se você não especificar esse qualificador, os valores de índice inteiro serão assumidos. Para especificar que os valores são valores de índice inteiro, use ValueType("index"). Para especificar que os valores são valores de sinalizador de bits, use ValueType("flag").
WmiDataId Cada propriedade deve conter o qualificador de WmiDataId. WmiDataId define a ordem na qual o consumidor lê os dados do evento. O valor para WmiDataId começa em 1 e incrementa para cada propriedade na classe. Por exemplo, WmiDataId(1).
XMLFragment Indica que os dados estão em formato XML e prontos para exibição sem formatação adicional.

 

Especificando valores de nível e habilitando sinalizadores para um provedor

Para documentar o nível e habilitar sinalizadores que um controlador usaria para habilitar seu provedor, inclua as propriedades "Level" e "Flags" na classe MOF do provedor. Os nomes das propriedades Level e Flags diferenciam maiúsculas de minúsculas. As propriedades devem incluir os qualificadores Values e ValueMap, que especificam o nível possível e habilitam valores de sinalizador. O ValueMap para os valores do sinalizador enable deve ser valores de bit (flag). O qualificador ValueDescriptions é opcional, mas você deve usá-lo para fornecer descrições para cada valor possível. As descrições são usadas quando alguém chama o TdhEnumerateProviderFieldInformation e funções de TdhQueryProviderFieldInformation para obter o nível possível e habilitar valores de sinalizadores (palavras-chave) para o provedor.

A seguir mostra uma classe de provedor que especifica o nível possível e habilita valores de sinalizadores.

[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;
};