Поделиться через


Как определить пользовательские типы данных?

Трассировка событий Windows (ETW) определяет несколько простых и сложных типов для использования в функциях трассировки. Эти типы объявляются в файле Defaultwpp.ini. Однако можно создать собственные пользовательские типы данных.

Настраиваемый тип данных используется, если требуется объявить переменные и использовать понятные термины вместо целых чисел для описания значения переменных.

Например, переменная DiskState содержит состояние диска. Ниже приведены значения DiskState.

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

Вместо чтения "DiskState=2" в сообщении трассировки и поиска значения 2 можно определить пользовательский тип DiskState, чтобы получить сообщение трассировки "DiskState is Failed".

Создание пользовательского типа данных

Чтобы создать пользовательский тип данных, выполните следующие действия.

  1. Создайте локальный файл конфигурации с расширением имени файла .ini, например localwpp.ini. Пользовательский тип нельзя добавить в заголовок или исходный файл.

  2. Используйте константу TYPEMACRO для определения пользовательского типа данных.

  3. Определите данные конфигурации в источниках или файле заголовка.

  4. Добавьте параметр -ini в макрос RUN_WPP в исходном файле.

  5. Используйте пользовательский тип данных в сообщениях трассировки.

Определение константы TYPEMACRO

Определите константу TYPEMACRO в следующем формате. Значения определяются как список строк.

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

где:

ItemListShort
16-разрядное целое число со знаком.

ItemListLong
32-разрядное целое число со знаком или без знака.

ItemSetByteShort
16-разрядное значение со знаком.

ItemSetByteLong
32-разрядное значение со знаком или без знака.

Пример:

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

Идентификация данных конфигурации

Если вы добавили пользовательский тип данных в файл, который содержит другой код, например исходный файл или файл заголовка, используйте инструкции конфигурации begin_wpp и end_wpp для идентификации данных конфигурации в файле. Пример:

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

Если вы добавили пользовательский тип данных в локальный файл конфигурации, инструкции begin_wpp config и end_wpp не требуются.

Добавление параметра -ini

При создании локального файла конфигурации для настраиваемого типа необходимо добавить параметр -ini в инструкцию RUN_WPP, которая вызывает препроцессор WPP.

Параметр -ini позволяет трассировке событий Windows искать данные конфигурации в файлах конфигурации (.ini) в дополнение к использованию Defaultwpp.ini. Пример:

RUN_WPP -km -ini:localwpp.ini

Важно!

Параметр -km не следует указывать в директиве RUN_WPP для приложений пользовательского режима или библиотек динамической компоновки (DLL).

Использование пользовательского типа данных

Определив пользовательский тип данных, его можно использовать в сообщениях трассировки. Предшествуйте имени типа знаком процента (%) и заключите его восклицательными знаками (!). Пример:

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

Результирующее сообщение трассировки использует определенную константу для представления значения:

DiskState is Offline.