如何定义自定义数据类型?

Windows 事件跟踪 (ETW) 定义了多个用于跟踪函数的简单和复杂类型。 这些类型在 Defaultwpp.ini 文件中声明。 但是,可以创建自己的自定义数据类型。

如果要声明变量并使用有意义的术语(而不是整数)来描述变量的值,请使用自定义数据类型。

例如, DiskState 变量包含磁盘的状态。 以下是 DiskState 的值:

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

可以定义名为 DiskState 的自定义类型,而不是在跟踪消息中读取“DiskState=2”,然后必须查找 2 的含义,以获取指示“DiskState 失败”的跟踪消息。

创建自定义数据类型

若要创建自定义数据类型,请完成以下步骤:

  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配置end_wpp 语句。

添加 -ini 参数

为自定义类型创建本地配置文件时,需要将 -ini 参数添加到调用 WPP 预处理器的 RUN_WPP 语句。

-ini 参数指示 ETW 在配置文件 (.ini) 中搜索配置数据,以及使用 Defaultwpp.ini。 例如:

RUN_WPP -km -ini:localwpp.ini

重要

不得在 RUN_WPP 指令中为用户模式应用程序或动态链接库指定 -km 开关, (DLL) 。

使用自定义数据类型

定义自定义数据类型后,可以在跟踪消息中使用它。 在类型名称前面加上百分号 (%) ,并在其周围用感叹号 (!) 。 例如:

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

生成的跟踪消息使用定义的常量来表示值:

DiskState is Offline.