EVENT_TRACE_HEADER struttura (evntrace.h)

La struttura EVENT_TRACE_HEADER contiene informazioni di traccia eventi standard comuni a tutti gli eventi scritti da TraceEvent.

Sintassi

typedef struct _EVENT_TRACE_HEADER {
  USHORT        Size;
  union {
    USHORT FieldTypeFlags;
    struct {
      UCHAR HeaderType;
      UCHAR MarkerFlags;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  union {
    ULONG Version;
    struct {
      UCHAR  Type;
      UCHAR  Level;
      USHORT Version;
    } Class;
  } DUMMYUNIONNAME2;
  ULONG         ThreadId;
  ULONG         ProcessId;
  LARGE_INTEGER TimeStamp;
  union {
    GUID      Guid;
    ULONGLONG GuidPtr;
  } DUMMYUNIONNAME3;
  union {
    struct {
      ULONG KernelTime;
      ULONG UserTime;
    } DUMMYSTRUCTNAME;
    ULONG64 ProcessorTime;
    struct {
      ULONG ClientContext;
      ULONG Flags;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME4;
} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;

Members

Size

Numero totale di byte dell'evento. Le dimensioni includono le dimensioni della struttura di intestazione, oltre alle dimensioni di tutti i dati specifici dell'evento aggiunti all'intestazione.

In input, le dimensioni devono essere inferiori alle dimensioni del buffer della sessione di traccia eventi meno 72 (0x48).

Nell'output non usare questo numero nei calcoli.

DUMMYUNIONNAME

DUMMYUNIONNAME.FieldTypeFlags

Riservato.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType

Riservato.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags

Riservato.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.Version

Si tratta di un roll-up dei membri della classe. Il byte a basso ordine contiene il tipo, il byte successivo contiene il livello e gli ultimi due byte contengono la versione.

DUMMYUNIONNAME2.Class

DUMMYUNIONNAME2.Class.Type

Tipo di evento. Un provider può definire i propri tipi di evento o usare i tipi di evento predefiniti elencati nella tabella seguente.

  • EVENT_TRACE_TYPE_CHECKPOINT: evento checkpoint. Usare per un evento che non è all'inizio o alla fine di un'attività.

  • EVENT_TRACE_TYPE_DC_END: evento finale della raccolta dati.

  • EVENT_TRACE_TYPE_DC_START: evento di inizio raccolta dati.

  • EVENT_TRACE_TYPE_DEQUEUE: evento Dequeue. Usare quando un'attività viene accodata prima dell'inizio. Usare EVENT_TRACE_TYPE_START per contrassegnare l'ora in cui viene accodato un elemento di lavoro. Usare il tipo di evento dequeue per contrassegnare l'ora in cui inizia effettivamente il lavoro sull'elemento. Usare EVENT_TRACE_TYPE_END per contrassegnare l'ora in cui viene completato il lavoro sull'elemento.

  • EVENT_TRACE_TYPE_END: Evento finale. Usare per tracciare lo stato finale di un evento in più passaggi.

  • EVENT_TRACE_TYPE_EXTENSION: evento di estensione. Usare per un evento che rappresenta una continuazione di un evento precedente. Ad esempio, usare il tipo di evento di estensione quando una traccia eventi registra più dati che possono adattarsi a un buffer di sessione.

  • EVENT_TRACE_TYPE_INFO: evento informativo. Si tratta del tipo di evento predefinito.

  • EVENT_TRACE_TYPE_REPLY: evento di risposta. Usare quando un'applicazione che richiede risorse può ricevere più risposte. Ad esempio, se un'applicazione client richiede un URL e il server Web risponde inviando diversi file, ogni file ricevuto può essere contrassegnato come evento di risposta.

  • EVENT_TRACE_TYPE_START: evento Start. Usare per tracciare lo stato iniziale di un evento in più passaggi.

Se si definiscono i tipi di evento personalizzati, è consigliabile usare i numeri a partire da 10. Tuttavia, non c'è nulla da impedire di usare tutti i numeri che si desidera usare. Se il GUID della classe di traccia eventi supporta più tipi di evento, i consumer useranno il tipo di evento per determinare l'evento e come interpretarne il contenuto.

DUMMYUNIONNAME2.Class.Level

Valore definito dal provider che definisce il livello di gravità usato per generare l'evento. Il valore è compreso tra 0 e 255. Il controller specifica il livello di gravità quando chiama la funzione EnableTraceEx2 . Il provider recupera il livello di gravità chiamando la funzione GetTraceEnableLevel dall'implementazionedi ControlCallback . Il provider usa il valore per impostare questo membro.

ETW definisce i livelli di gravità seguenti. La selezione di un livello superiore a 1 include anche eventi per livelli inferiori. Ad esempio, se il controller specifica TRACE_LEVEL_WARNING (3), il provider genera anche TRACE_LEVEL_FATAL (1) e TRACE_LEVEL_ERROR (2).

Valore Significato
TRACE_LEVEL_CRITICAL (1) Eventi di uscita o terminazione anomali
TRACE_LEVEL_ERROR (2) Eventi di errore gravi
TRACE_LEVEL_WARNING (3) Eventi di avviso, ad esempio errori di allocazione
TRACE_LEVEL_INFORMATION (4) Eventi non di errore, ad esempio eventi di ingresso o uscita
TRACE_LEVEL_VERBOSE (5) Eventi di traccia dettagliati

DUMMYUNIONNAME2.Class.Version

Indica la versione della classe di traccia evento usata per registrare l'evento. Specificare zero se è presente una sola versione della classe di traccia dell'evento. La versione indica al consumer quale classe MOF usare per decifrare i dati dell'evento.

ThreadId

Nell'output identifica il thread che ha generato l'evento.

Si noti che in Windows 2000 ThreadId era un valore ULONGLONG .

ProcessId

Nell'output identifica il processo che ha generato l'evento.

Windows 2000: Questo membro non è supportato.

TimeStamp

Nell'output contiene l'ora in cui si è verificato l'evento. La risoluzione è tempo di sistema a meno che il membro ProcessTraceMode di EVENT_TRACE_LOGFILE contenga il PROCESS_TRACE_MODE_RAW_TIMESTAMP flag, in cui la risoluzione dipende dal valore del membro Wnode.ClientContext di EVENT_TRACE_PROPERTIES al momento della creazione della sessione.

DUMMYUNIONNAME3

DUMMYUNIONNAME3.Guid

GUID della classe di traccia eventi. È possibile usare il GUID della classe per identificare una categoria di eventi e il membro Class.Type per identificare un evento all'interno della categoria di eventi.

In alternativa, è possibile usare il membro GuidPtr per specificare il GUID della classe.

Windows XP e Windows 2000: Il GUID della classe deve essere stato registrato in precedenza usando la funzione RegisterTraceGuids .

DUMMYUNIONNAME3.GuidPtr

Puntatore a un GUID della classe di traccia eventi. In alternativa, è possibile usare il membro Guid per specificare il GUID della classe.

Quando l'evento viene scritto, ETW usa il puntatore per copiare il GUID nell'evento (il GUID è incluso nell'evento, non il puntatore).

Se si usa questo membro, il membro Flags deve contenere anche WNODE_FLAG_USE_GUID_PTR.

DUMMYUNIONNAME4

DUMMYUNIONNAME4.DUMMYSTRUCTNAME

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime

Tempo di esecuzione trascorso per le istruzioni in modalità kernel, nelle unità temporali della CPU. Se si usa una sessione privata, usare invece il valore nel membro ProcessorTime . Per altre informazioni, vedere la sezione Osservazioni.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime

Tempo di esecuzione trascorso per le istruzioni in modalità utente, nelle unità di tempo della CPU. Se si usa una sessione privata, usare invece il valore nel membro ProcessorTime . Per altre informazioni, vedere la sezione Osservazioni.

DUMMYUNIONNAME4.ProcessorTime

Per le sessioni private, il tempo di esecuzione trascorso per le istruzioni in modalità utente, nei tick della CPU.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext

Riservato.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags

È necessario impostare questo membro su WNODE_FLAG_TRACED_GUID e, facoltativamente, specificare qualsiasi combinazione dei seguenti elementi.

  • WNODE_FLAG_USE_GUID_PTR: specificare se il membro GuidPtr contiene il GUID della classe.

  • WNODE_FLAG_USE_MOF_PTR: specificare se una matrice di strutture MOF_FIELD contiene i dati dell'evento aggiunti a questa struttura. Il numero di elementi nella matrice è limitato a MAX_MOF_FIELDS.

Commenti

Assicurarsi di inizializzare la memoria per questa struttura su zero prima di impostare i membri.

È possibile usare i membri KernelTime e UserTime per determinare il costo della CPU in unità per un set di istruzioni (i valori indicano l'utilizzo della CPU addebitato a tale thread al momento della registrazione). Ad esempio, se l'evento A e l'evento B vengono registrati consecutivamente dallo stesso thread e hanno numeri di utilizzo della CPU 150 e 175, l'attività eseguita da tale thread tra eventi A e B costa 25 unità di tempo CPU (175 - 150).

TimerResolution della struttura TRACE_LOGFILE_HEADER contiene la risoluzione del timer di utilizzo della CPU in unità da 100 nanosecondi. È possibile usare la risoluzione timer con i valori di tempo del kernel e ora utente per determinare la quantità di tempo di CPU usata dal set di istruzioni. Ad esempio, se la risoluzione del timer è 156.250, 25 unità di tempo cpu sono 0,39 secondi (156.250 * 25 * 100 / 1.000.000.000.000). Si tratta della quantità di tempo della CPU (non trascorso l'ora dell'orologio a parete) utilizzata dal set di istruzioni tra eventi A e B.

Si noti tuttavia che la risoluzione timer di utilizzo della CPU è in genere molto bassa (circa 10 o più millisecondi). Pertanto, i numeri di utilizzo della CPU non possono essere usati per tenere conto dell'utilizzo del tempo della CPU tra i thread con accuratezza elevata. Piuttosto, sono adatti per lungo termine, tipo statistico di analisi.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Intestazione evntrace.h

Vedi anche

EVENT_TRACE

EventCallback

Traceevent