Macro TraceLoggingCustom (traceloggingprovider.h)

Macro wrapper traceLogging que adiciona um campo que foi empacotado usando um serializador personalizado ao evento.

A maioria dos eventos traceLogging não precisa usar um serializador personalizado e não deve usar TraceLoggingCustom.

Sintaxe

void TraceLoggingCustom(
  [in]            pValue,
  [in]            cbValue,
  [in]            protocol,
  [in]            bSchema,
  [in]            cbSchema,
  [in, optional]  __VA_ARGS__
);

Parâmetros

[in] pValue

Um ponteiro para o conteúdo do campo, serializado em runtime por um serializador da família de protocolos especificada.

[in] cbValue

O tamanho, em bytes, da carga do campo, serializado em runtime por um serializador da família de protocolos especificada.

[in] protocol

Uma família de protocolos, que pode ser um valor definido pela Microsoft de 0 a 4 ou um valor definido pelo usuário de 5 a 31. Os valores definidos pela Microsoft são definidos por macros que começam com TRACELOGGING_PROTOCOL_.

[in] bSchema

Uma lista separada por vírgulas de valores de bytes que contêm as informações necessárias para decodificar a carga (ou seja, o esquema), em um formato definido pelo protocolo. Os valores nesta lista devem ser constantes em tempo de compilação. Exemplo: (0x12, 0x23, 0x34)

[in] cbSchema

O número de valores de bytes fornecidos em bSchema. Esse valor deve ser uma constante de tempo de compilação.

[in, optional] __VA_ARGS__

Parâmetros opcionais de nome, descrição e marcas para a definição de campo.

TraceLoggingCustom pode ser especificado com 5, 6, 7 ou 8 parâmetros. Se um parâmetro não for especificado, um padrão será usado. Por exemplo, TraceLoggingCustom(&x.data, sizeof(x.data), p, (schema), cbSchema) é equivalente a TraceLoggingCustom(&x.data, sizeof(x.data), p, (schema), cbSchema, "&x.data", "", 0).

  • [in, optional] name

    O nome a ser usado para o campo de evento. Se fornecido, o parâmetro name deve ser um literal de cadeia de caracteres (não uma variável) e não deve conter nenhum caractere '\0'. Se não for fornecido, o nome do campo de evento será baseado em pValue.

  • [in, optional] description

    A descrição do valor do campo de evento. Se fornecido, o parâmetro de descrição deve ser um literal de cadeia de caracteres e será incluído no PDB.

  • [in, optional] tags

    Um valor inteiro constante de tempo de compilação. Os 28 bits baixos do valor serão incluídos nos metadados do campo. A semântica desse valor é definida pelo consumidor do evento. Durante o processamento de eventos, esse valor pode ser recuperado do campo Marcas de EVENT_PROPERTY_INFO .

Valor retornado

Nenhum

Comentários

TraceLoggingCustom(pValue, cbValue, protocol, (schema...), cbSchema, ...) pode ser usado como um parâmetro para uma invocação de uma macro TraceLoggingWrite . Cada parâmetro TraceLoggingCustom adiciona um campo serializado personalizado ao evento. A maioria dos eventos traceLogging não usa serializadores personalizados e não deve usar TraceLoggingCustom. Os decodificadores ETW de uso geral não dão suporte a campos que usam serialização personalizada e normalmente tratarão os campos como TDH_INTYPE_BINARY.

Os decodificadores devem acessar campos serializados TraceLoggingCustom usando as APIs TDH. A estrutura TRACE_EVENT_INFO retornada por TdhGetEventInformation conterá duas estruturas EVENT_PROPERTY_INFO relacionadas a um campo TraceLoggingCustom registrado. Eles se correlacionam da forma típica com os dados encontrados no blob UserData do EVENT_RECORD para um campo binário (TDH_INTYPE_BINARY).

  • A primeira das duas estruturas EVENT_PROPERTY_INFO é a propriedade "Length", que descreve o comprimento da carga serializada (ou seja, cbValue).
  • A segunda é a propriedade que se refere ao conteúdo do usuário (pbValue). A segunda propriedade terá PropertyParamLength (em referência à propriedade "Length") e PropertyHasCustomSchema definidas.

Os decodificadores devem reconhecer que PropertyHasCustomSchema foi definido e consultar o membro customSchemaType do EVENT_PROPERTY_INFO para o CustomSchemaOffset, que é o deslocamento no TRACE_EVENT_INFORMATION em que o tipo de protocolo e os metadados de protocolo estão localizados. Lá, eles podem encontrar os metadados passados com um formato de (pseudo-struct):

struct _CUSTOM_SCHEMA {
    UINT16 protocolType;
    UINT16 cbSchema;
    BYTE bSchema[cbSchema];
};

Os decodificadores existentes que não tomam essas etapas extras para reconhecer o sinalizador PropertyHasCustomSchema e, em vez disso, referem-se à parte nonStructType da união EVENT_PROPERTY_INFO para decodificar o evento tratará perfeitamente a carga como se fosse TDH_INTYPE_BINARY.

Exemplos

// Value generated at runtime by serializer:
BYTE rgValue[] = {...};

TraceLoggingWrite(
   g_hProvider,
   "MyEventName",
   TraceLoggingCustom(
      rgValue,
      sizeof(rgValue),
      TRACELOGGING_PROTOCOL_MYPROTOCOL,
      ( 0x0, 0x1, 0x2 ), // Generated at compile-time
      3,
      "MyCustomField"),
   TraceLoggingLevel(WINEVENT_LEVEL_WARNING), // Levels defined in <winmeta.h>
   TraceLoggingKeyword(MyEventCategories)); // Provider-defined categories

Requisitos

   
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho traceloggingprovider.h

Confira também

TraceLoggingWrite

Macros de wrapper traceLogging