Как определить пользовательские типы данных?
Трассировка событий Windows (ETW) определяет несколько простых и сложных типов для использования в функциях трассировки. Эти типы объявляются в файле Defaultwpp.ini. Однако можно создать собственные пользовательские типы данных.
Настраиваемый тип данных используется, если требуется объявить переменные и использовать понятные термины вместо целых чисел для описания значения переменных.
Например, переменная DiskState содержит состояние диска. Ниже приведены значения DiskState.
DiskOffline = 0
DiskOnline = 1
DiskFailed = 2
DiskStalled = 3
Вместо чтения "DiskState=2" в сообщении трассировки и поиска значения 2 можно определить пользовательский тип DiskState, чтобы получить сообщение трассировки "DiskState is Failed".
Создание пользовательского типа данных
Чтобы создать пользовательский тип данных, выполните следующие действия.
Создайте локальный файл конфигурации с расширением имени файла .ini, например localwpp.ini. Пользовательский тип нельзя добавить в заголовок или исходный файл.
Используйте константу TYPEMACRO для определения пользовательского типа данных.
Определите данные конфигурации в источниках или файле заголовка.
Добавьте параметр -ini в макрос RUN_WPP в исходном файле.
Используйте пользовательский тип данных в сообщениях трассировки.
Определение константы 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.