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

时间:2012-09-04 21:51:55

标签: windows winapi tracing wdk etw

我正在尝试通过WPP实施使用“Windows事件跟踪”。根据{{​​3}}中的文档,可以从单个驱动程序向多个提供程序发出跟踪,但我没有看到这样做的示例:

  

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

我尝试使用不同的guid创建了两个头文件,每个头文件都有WPP_CONTROL_GUIDS。然后我包含来自c / cpp文件的不同头文件,我希望将这些文件发布到不同的提供者。但似乎主文件中的定义覆盖了这个分隔,并且所有跟踪都到达了它使用的提供程序......

有什么建议吗?有样品吗?谢谢!

1 个答案:

答案 0 :(得分: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。