EVENT_TRACE_HEADER-Struktur (evntrace.h)

Die EVENT_TRACE_HEADER-Struktur enthält Standardinformationen zur Ereignisablaufverfolgung, die allen von TraceEvent geschriebenen Ereignissen gemeinsam sind.

Syntax

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;

Member

Size

Gesamtanzahl der Bytes des Ereignisses. Die Größe umfasst die Größe der Headerstruktur sowie die Größe aller ereignisspezifischen Daten, die an den Header angefügt werden.

Bei der Eingabe muss die Größe kleiner als die Größe des Puffers der Ereignisablaufverfolgungssitzung minus 72 (0x48) sein.

Verwenden Sie diese Zahl bei der Ausgabe nicht in Berechnungen.

DUMMYUNIONNAME

DUMMYUNIONNAME.FieldTypeFlags

Reserviert.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType

Reserviert.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags

Reserviert.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.Version

Dies ist ein Rollup der Member der Klasse. Das Byte mit niedriger Reihenfolge enthält den Typ, das nächste Byte die Ebene, und die letzten beiden Bytes enthalten die Version.

DUMMYUNIONNAME2.Class

DUMMYUNIONNAME2.Class.Type

Ereignistyp. Ein Anbieter kann eigene Ereignistypen definieren oder die vordefinierten Ereignistypen verwenden, die in der folgenden Tabelle aufgeführt sind.

  • EVENT_TRACE_TYPE_CHECKPOINT: Prüfpunktereignis. Verwenden Sie für ein Ereignis, das sich nicht am Anfang oder Ende einer Aktivität befindet.

  • EVENT_TRACE_TYPE_DC_END: Endereignis der Datensammlung.

  • EVENT_TRACE_TYPE_DC_START: Startereignis der Datensammlung.

  • EVENT_TRACE_TYPE_DEQUEUE: Dequeue-Ereignis. Verwenden Sie, wenn eine Aktivität in die Warteschlange gestellt wird, bevor sie beginnt. Verwenden Sie EVENT_TRACE_TYPE_START, um die Uhrzeit zu markieren, zu der ein Arbeitselement in die Warteschlange gestellt wird. Verwenden Sie den Dequeue-Ereignistyp, um den Zeitpunkt zu markieren, zu dem die Arbeit am Element tatsächlich beginnt. Verwenden Sie EVENT_TRACE_TYPE_END, um den Zeitpunkt zu markieren, zu dem die Arbeit am Element abgeschlossen ist.

  • EVENT_TRACE_TYPE_END: Endereignis. Verwenden Sie, um den enden Zustand eines mehrstufigen Ereignisses nachzuverfolgen.

  • EVENT_TRACE_TYPE_EXTENSION: Erweiterungsereignis. Verwenden Sie für ein Ereignis, das eine Fortsetzung eines vorherigen Ereignisses darstellt. Verwenden Sie beispielsweise den Erweiterungsereignistyp, wenn eine Ereignisablaufverfolgung mehr Daten erfasst, als in einen Sitzungspuffer passen können.

  • EVENT_TRACE_TYPE_INFO: Informationsereignis. Dies ist der Standardereignistyp.

  • EVENT_TRACE_TYPE_REPLY: Antwortereignis. Verwenden Sie, wenn eine Anwendung, die Ressourcen anfordert, mehrere Antworten erhalten kann. Wenn beispielsweise eine Clientanwendung eine URL anfordert und der Webserver antwortet, indem mehrere Dateien gesendet werden, kann jede empfangene Datei als Antwortereignis markiert werden.

  • EVENT_TRACE_TYPE_START: Startereignis. Verwenden Sie zum Nachverfolgen des Anfangszustands eines Ereignisses mit mehreren Schritten.

Wenn Sie Ihre eigenen Ereignistypen definieren, sollten Sie Zahlen ab 10 verwenden. Es gibt jedoch nichts, was Sie daran hindern kann, Zahlen zu verwenden, die Sie verwenden möchten. Wenn die GUID ihrer Ereignisablaufverfolgungsklasse mehrere Ereignistypen unterstützt, verwenden Consumer den Ereignistyp, um das Ereignis zu bestimmen und dessen Inhalt zu interpretieren.

DUMMYUNIONNAME2.Class.Level

Vom Anbieter definierter Wert, der den Schweregrad definiert, der zum Generieren des Ereignisses verwendet wird. Der Wert reicht von 0 bis 255. Der Controller gibt den Schweregrad an, wenn er die EnableTraceEx2-Funktion aufruft. Der Anbieter ruft den Schweregrad ab, indem er die GetTraceEnableLevel-Funktion aus seiner ControlCallback-Implementierung aufruft. Der Anbieter verwendet den Wert, um diesen Member festzulegen.

ETW definiert die folgenden Schweregrade. Wenn Sie eine Ebene höher als 1 auswählen, werden auch Ereignisse für niedrigere Ebenen enthalten. Wenn der Controller beispielsweise TRACE_LEVEL_WARNING (3) angibt, generiert der Anbieter auch TRACE_LEVEL_FATAL (1) und TRACE_LEVEL_ERROR (2) Ereignisse.

Wert Bedeutung
TRACE_LEVEL_CRITICAL (1) Ungewöhnliche Beendigungs- oder Beendigungsereignisse
TRACE_LEVEL_ERROR (2) Schwerwiegende Fehlerereignisse
TRACE_LEVEL_WARNING (3) Warnungsereignisse wie Zuordnungsfehler
TRACE_LEVEL_INFORMATION (4) Nicht-Fehlerereignisse wie Ein- oder Ausstiegsereignisse
TRACE_LEVEL_VERBOSE (5) Detaillierte Ablaufverfolgungsereignisse

DUMMYUNIONNAME2.Class.Version

Gibt die Version der Ereignisablaufverfolgungsklasse an, die Sie zum Protokollieren des Ereignisses verwenden. Geben Sie null an, wenn es nur eine Version Ihrer Ereignisablaufverfolgungsklasse gibt. Die Version teilt dem Consumer mit, welche MOF-Klasse zum Entschlüsseln der Ereignisdaten verwendet werden soll.

ThreadId

Identifiziert in der Ausgabe den Thread, der das Ereignis generiert hat.

Beachten Sie, dass ThreadId unter Windows 2000 ein ULONGLONGLONG-Wert war.

ProcessId

Identifiziert in der Ausgabe den Prozess, der das Ereignis generiert hat.

Windows 2000: Dieser Member wird nicht unterstützt.

TimeStamp

Enthält in der Ausgabe die Zeit, zu der das Ereignis aufgetreten ist. Die Auflösung ist Systemzeit, es sei denn, das ProcessTraceMode-Element von EVENT_TRACE_LOGFILE enthält das PROCESS_TRACE_MODE_RAW_TIMESTAMP Flag. In diesem Fall hängt die Auflösung vom Wert des Wnode.ClientContext-Members von EVENT_TRACE_PROPERTIES zum Zeitpunkt der Erstellung der Sitzung durch den Controller ab.

DUMMYUNIONNAME3

DUMMYUNIONNAME3.Guid

GUID der Ereignisablaufverfolgungsklasse. Sie können die Klassen-GUID verwenden, um eine Kategorie von Ereignissen und das Class.Type-Element zu identifizieren, um ein Ereignis innerhalb der Kategorie von Ereignissen zu identifizieren.

Alternativ können Sie das GuidPtr-Element verwenden, um die Klassen-GUID anzugeben.

Windows XP und Windows 2000: Die Klassen-GUID muss zuvor mit der Funktion RegisterTraceGuids registriert worden sein.

DUMMYUNIONNAME3.GuidPtr

Zeiger auf eine Ereignisablaufverfolgungsklasse-GUID. Alternativ können Sie das Guid-Element verwenden, um die Klassen-GUID anzugeben.

Wenn das Ereignis geschrieben wird, verwendet ETW den Zeiger, um die GUID in das Ereignis zu kopieren (die GUID ist im Ereignis enthalten, nicht der Zeiger).

Wenn Sie dieses Element verwenden, muss das Flags-Element auch WNODE_FLAG_USE_GUID_PTR enthalten.

DUMMYUNIONNAME4

DUMMYUNIONNAME4.DUMMYSTRUCTNAME

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime

Verstrichene Ausführungszeit für Kernelmodusanweisungen in CPU-Zeiteinheiten. Wenn Sie eine private Sitzung verwenden, verwenden Sie stattdessen den Wert im ProcessorTime-Member . Weitere Informationen finden Sie in den Hinweisen.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime

Verstrichene Ausführungszeit für Benutzermodusanweisungen in CPU-Zeiteinheiten. Wenn Sie eine private Sitzung verwenden, verwenden Sie stattdessen den Wert im ProcessorTime-Member . Weitere Informationen finden Sie in den Hinweisen.

DUMMYUNIONNAME4.ProcessorTime

Bei privaten Sitzungen die verstrichene Ausführungszeit für Benutzermodusanweisungen in CPU-Ticks.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext

Reserviert.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags

Sie müssen dieses Element auf WNODE_FLAG_TRACED_GUID festlegen und können optional eine beliebige Kombination der folgenden Elemente angeben.

  • WNODE_FLAG_USE_GUID_PTR: Geben Sie an, ob das GuidPtr-Element die Klassen-GUID enthält.

  • WNODE_FLAG_USE_MOF_PTR: Geben Sie an, ob ein Array von MOF_FIELD Strukturen die Ereignisdaten enthält, die dieser Struktur angefügt sind. Die Anzahl der Elemente im Array ist auf MAX_MOF_FIELDS beschränkt.

Hinweise

Stellen Sie sicher, dass Sie den Arbeitsspeicher für diese Struktur auf Null initialisieren, bevor Sie Elemente festlegen.

Sie können die KernelTime - und UserTime-Member verwenden, um die CPU-Kosten in Einheiten für eine Reihe von Anweisungen zu ermitteln (die Werte geben die CPU-Auslastung an, die diesem Thread zum Zeitpunkt der Protokollierung in Rechnung gestellt wurde). Wenn beispielsweise Ereignis A und Ereignis B von demselben Thread nacheinander protokolliert werden und die CPU-Auslastungsnummern 150 und 175 aufweisen, kostet die Aktivität, die von diesem Thread zwischen den Ereignissen A und B ausgeführt wurde, 25 CPU-Zeiteinheiten (175 – 150).

Die TimerResolution der TRACE_LOGFILE_HEADER-Struktur enthält die Auflösung des CPU-Auslastungstimers in 100 Nanosekundeneinheiten. Sie können die Timerauflösung mit den Kernelzeit- und Benutzerzeitwerten verwenden, um die CPU-Zeit zu bestimmen, die der Satz von Anweisungen verwendet. Wenn die Timerauflösung beispielsweise 156.250 beträgt, sind 25 CPU-Zeiteinheiten 0,39 Sekunden (156.250 * 25 * 100 / 1.000.000.000). Dies ist die Menge der CPU-Zeit (nicht verstrichene Wanduhrzeit), die vom Satz von Anweisungen zwischen den Ereignissen A und B verwendet wird.

Beachten Sie jedoch, dass die Timerauflösung der CPU-Auslastung in der Regel sehr niedrig ist (etwa 10 oder mehr Millisekunden). Daher können CPU-Auslastungszahlen nicht verwendet werden, um die CPU-Zeitnutzung zwischen Threads mit hoher Genauigkeit zu berücksichtigen. Sie eignen sich vielmehr für eine langfristige, statistische Art der Analyse.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile evntrace.h

Weitere Informationen

EVENT_TRACE

EventCallback

Traceevent