使用WPP跟踪多个ETW提供程序

4
我正在尝试通过WPP工具使用“Windows事件跟踪”。根据在Windows驱动程序中开始软件跟踪文档,一个驱动程序可以通过多个提供者发出跟踪信息,但是我没有看到如何实现的示例:
引用:

驱动程序可以指定多个控制GUID。每个控制GUID标识唯一的提供者。例如,如果驱动程序定义了两个控制GUID,一个用于共享库,另一个用于驱动程序,则库和驱动程序可以作为两个不同的提供者启用。可以为库或驱动程序启用跟踪,或者同时启用。

我尝试创建两个带有不同GUID的头文件,并在预期向不同提供者发出跟踪信息的c/cpp文件中包含这些不同的头文件。但似乎主文件中的定义覆盖了这种分离,所有跟踪信息都到达了由它使用的提供者...
有什么建议吗?有什么示例吗?谢谢!
1个回答

1

我现在像避开瘟疫一样避免使用 WPP 跟踪,但跟踪模板提供了如何执行此操作的示例。您应该在 TMH 文件中的某个地方看到这条注释:

// template C:\WinDDK\7600.16385.1\bin\wppconfig\rev1\control.tpl
//
//     Defines a set of macro that expand control model specified
//     with WPP_CONTROL_GUIDS (example shown below)
//     into an enum of trace levels and required structures that
//     contain the mask of levels, logger handle and some information
//     required for registration.
//

///////////////////////////////////////////////////////////////////////////////////
//
// #define WPP_CONTROL_GUIDS \
//     WPP_DEFINE_CONTROL_GUID(Regular,(81b20fea,73a8,4b62,95bc,354477c97a6f), \
//       WPP_DEFINE_BIT(Error)      \
//       WPP_DEFINE_BIT(Unusual)    \
//       WPP_DEFINE_BIT(Noise)      \
//    )        \
//    WPP_DEFINE_CONTROL_GUID(HiFreq,(91b20fea,73a8,4b62,95bc,354477c97a6f), \
//       WPP_DEFINE_BIT(Entry)      \
//       WPP_DEFINE_BIT(Exit)       \
//       WPP_DEFINE_BIT(ApiCalls)   \
//       WPP_DEFINE_BIT(RandomJunk) \
//       WPP_DEFINE_BIT(LovePoem)   \
//    )  

所以,您应该在同一个WPP_CONTROL_GUIDS宏中定义两个GUID。


谢谢!我不明白的部分是,在跟踪时如何选择要使用哪个控制-GUID(在您的示例中为Regular vs. HiFreq)。是通过使用非重叠的标志集,然后在跟踪宏中指定特定的标志来实现的吗?还是我需要直接指定要使用哪一个? - Uri Cohen
我的理解是您使用非重叠标志。生成的跟踪语句只需要一个标志(以及可选的级别)。幕后的魔法应该根据标志将消息记录到适当的控制GUID中。 - snoone
@snoone,你对现在的WPP跟踪有什么看法?根据我的经验,在Windows 8.1上,WPP跟踪非常好。 - tchau.dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接