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 |