Macro TraceLoggingCustom (traceloggingprovider.h)

Macro wrapper TraceLogging che aggiunge un campo compresso utilizzando un serializzatore personalizzato all'evento.

La maggior parte degli eventi TraceLogging non deve usare un serializzatore personalizzato e non deve usare TraceLoggingCustom.

Sintassi

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

Parametri

[in] pValue

Puntatore al payload del campo, serializzato in fase di esecuzione da un serializzatore della famiglia di protocolli specificata.

[in] cbValue

Dimensioni, in byte, del payload del campo, serializzate in fase di esecuzione da un serializzatore della famiglia di protocolli specificata.

[in] protocol

Famiglia di protocolli, che può essere un valore definito da Microsoft da 0 a 4 o un valore definito dall'utente da 5 a 31. I valori definiti da Microsoft sono definiti dalle macro che iniziano con TRACELOGGING_PROTOCOL_.

[in] bSchema

Elenco delimitato da virgole di valori di byte che contengono le informazioni necessarie per decodificare il payload (ad esempio lo schema), in un formato definito dal protocollo. I valori in questo elenco devono essere costanti in fase di compilazione. Esempio: (0x12, 0x23, 0x34)

[in] cbSchema

Numero di valori di byte forniti in bSchema. Questo valore deve essere una costante in fase di compilazione.

[in, optional] __VA_ARGS__

Parametri di nome, descrizione e tag facoltativi per la definizione del campo.

TraceLoggingCustom può essere specificato con 5, 6, 7 o 8 parametri. Se non viene specificato un parametro, verrà utilizzato un valore predefinito. Ad esempio, TraceLoggingCustom(&x.data, sizeof(x.data), p, (schema), cbSchema) equivale a TraceLoggingCustom(&x.data, sizeof(x.data), p, (schema), cbSchema, "&x.data", "", 0).

  • [in, optional] name

    Nome da utilizzare per il campo dell'evento. Se specificato, il parametro name deve essere un valore letterale stringa (non una variabile) e non deve contenere caratteri '\0'. Se non specificato, il nome del campo evento sarà basato su pValue.

  • [in, optional] description

    Descrizione del valore del campo evento. Se specificato, il parametro description deve essere un valore letterale stringa e verrà incluso nel PDB.

  • [in, optional] tags

    Valore intero costante in fase di compilazione. I 28 bit bassi del valore verranno inclusi nei metadati del campo. La semantica di questo valore è definita dal consumer di eventi. Durante l'elaborazione degli eventi, questo valore può essere recuperato dal campo tag EVENT_PROPERTY_INFO .

Valore restituito

nessuno

Osservazioni

TraceLoggingCustom(pValue, cbValue, protocol, (schema...), cbSchema, ...) può essere usato come parametro per una chiamata di una macro TraceLoggingWrite . Ogni parametro TraceLoggingCustom aggiunge un campo serializzato personalizzato all'evento. La maggior parte degli eventi TraceLogging non usa serializzatori personalizzati e non deve usare TraceLoggingCustom. I decodificatori ETW per utilizzo generico non supportano campi che usano la serializzazione personalizzata e in genere considerano i campi come TDH_INTYPE_BINARY.

I decodificatori devono accedere ai campi serializzati TraceLoggingCustom usando le API TDH. La struttura TRACE_EVENT_INFO restituita da TdhGetEventInformation conterrà due strutture EVENT_PROPERTY_INFO correlate a un campo TraceLoggingCustom registrato. Questi elementi sono correlati in modo tipico con i dati trovati nel BLOB UserData del EVENT_RECORD per un campo binario (TDH_INTYPE_BINARY).

  • La prima delle due strutture EVENT_PROPERTY_INFO è la proprietà "Length" che descrive la lunghezza del payload serializzato ,ad esempio cbValue.
  • Il secondo è la proprietà che fa riferimento al payload dell'utente (pbValue). La seconda proprietà avrà PropertyParamLength (in riferimento alla proprietà "Length") e PropertyHasCustomSchema impostata.

I decodificatori devono riconoscere che PropertyHasCustomSchema è stato impostato e consultare il membro customSchemaType del EVENT_PROPERTY_INFO per CustomSchemaOffset, ovvero l'offset nel TRACE_EVENT_INFORMATION in cui si trovano il tipo di protocollo e i metadati del protocollo. Qui è possibile trovare i metadati passati con un formato (pseudo-struct):

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

I decodificatori esistenti che non eseguono questi passaggi aggiuntivi per riconoscere il flag PropertyHasCustomSchema e fanno invece riferimento alla parte nonStructType dell'unione EVENT_PROPERTY_INFO per decodificare l'evento tratterà facilmente il payload come se fosse TDH_INTYPE_BINARY.

Esempio

// 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

Requisiti

   
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione traceloggingprovider.h

Vedi anche

TraceLoggingWrite

Macro wrapper TraceLogging