Freigeben über


Wie definieren Sie benutzerdefinierte Datentypen?

Die Ereignisablaufverfolgung für Windows (ETW) definiert mehrere einfache und komplexe Typen für die Verwendung in den Ablaufverfolgungsfunktionen. Diese Typen werden in der datei Defaultwpp.ini deklariert. Sie können jedoch eigene benutzerdefinierte Datentypen erstellen.

Sie verwenden einen benutzerdefinierten Datentyp, wenn Sie Variablen deklarieren und aussagekräftige Begriffe anstelle von ganzen Zahlen verwenden möchten, um den Wert der Variablen zu beschreiben.

Die DiskState-Variable enthält beispielsweise den Zustand des Datenträgers. Im Folgenden sind die Werte von DiskState aufgeführt:

DiskOffline = 0
DiskOnline = 1
DiskFailed = 2
DiskStalled = 3

Anstatt "DiskState=2" in einer Ablaufverfolgungsmeldung zu lesen und dann die Bedeutung von 2 zu suchen, können Sie einen benutzerdefinierten Typ namens DiskState definieren, um eine Ablaufverfolgungsmeldung mit der Meldung "DiskState ist fehlgeschlagen" abzurufen.

Erstellen eines benutzerdefinierten Datentyps

Führen Sie die folgenden Schritte aus, um einen benutzerdefinierten Datentyp zu erstellen:

  1. Erstellen Sie eine lokale Konfigurationsdatei mit der .ini Dateinamenerweiterung, z. B. localwpp.ini. Sie können einem Header oder einer Quelldatei keinen benutzerdefinierten Typ hinzufügen.

  2. Verwenden Sie die TYPEMACRO-Konstante, um den benutzerdefinierten Datentyp zu definieren.

  3. Identifizieren Sie die Konfigurationsdaten in Ihren Quellen oder der Headerdatei.

  4. Fügen Sie den Parameter -ini dem makro RUN_WPP in Ihrer Quelldatei hinzu.

  5. Verwenden Sie den benutzerdefinierten Datentyp in Ablaufverfolgungsmeldungen.

Definieren einer TYPEMACRO-Konstante

Definieren Sie eine TYPEMACRO-Konstante mit dem folgenden Format. Die Werte werden als Liste von Zeichenfolgen definiert.

TYPEMACRO(Type,{ItemListLong | ItemListShort | ItemListByteShort | ItemListByteLong},(Value1,Value2...));

Dabei gilt:

ItemListShort
Ganze 16-Bit-Zahl mit Vorzeichen.

ItemListLong
32-Bit-Ganzzahl mit Vorzeichen oder ohne Vorzeichen.

ItemSetByteShort
Signierter 16-Bit-Bitwert.

ItemSetByteLong
Signierter oder nicht signierter 32-Bit-Bitwert.

Beispiel:

TYPEMACRO(DiskState,ItemListLong(DiskOffline,DiskOnline,DiskFailed,DiskStalled));

Identifizieren der Konfigurationsdaten

Wenn Sie den benutzerdefinierten Datentyp zu einer Datei hinzugefügt haben, die über anderen Code verfügt, z. B. eine Quelldatei oder eine Headerdatei, verwenden Sie die begin_wpp-Konfiguration und end_wpp-Anweisungen , um die Konfigurationsdaten in der Datei zu identifizieren. Beispiel:

// begin_wpp config
    //TYPEMACRO(DiskState,ItemListLong(DiskOffline,DiskOnline,DiskFailed,DiskStalled));
// end_wpp

Wenn Sie den benutzerdefinierten Datentyp zu einer lokalen Konfigurationsdatei hinzugefügt haben, sind die anweisungen begin_wpp Config und end_wpp nicht erforderlich.

Hinzufügen des Parameters "-ini"

Wenn Sie eine lokale Konfigurationsdatei für einen benutzerdefinierten Typ erstellen, müssen Sie den Parameter -ini der RUN_WPP-Anweisung hinzufügen, die den WPP-Präprozessor aufruft.

Der Parameter -ini weist ETW an, in Konfigurationsdateien (.ini) nach Konfigurationsdaten zu suchen, zusätzlich zur Verwendung von Defaultwpp.ini. Beispiel:

RUN_WPP -km -ini:localwpp.ini

Wichtig

Sie dürfen den Schalter -km nicht in der RUN_WPP-Direktive für Benutzermodusanwendungen oder Dynamic Link Libraries (DLLs) angeben.

Verwenden des benutzerdefinierten Datentyps

Nachdem Sie einen benutzerdefinierten Datentyp definiert haben, können Sie ihn in Ablaufverfolgungsmeldungen verwenden. Stellen Sie dem Typnamen ein Prozentzeichen (%) voran, und umschließen Sie ihn mit Ausrufezeichen (!). Beispiel:

DoTraceMessage(INFO,"Disk State is %!diskstate!",DiskState); 

Die resultierende Ablaufverfolgungsmeldung verwendet die von Ihnen definierte Konstante, um den Wert darzustellen:

DiskState is Offline.