Question

I'm trying to use "Event Tracing for Windows" through WPP instumentation. Per documentation in Getting Started with Software Tracing in Windows Drivers it is possible to issue traces to multiple providers from a single driver, but I saw no example for doing so:

A driver can specify more than one control GUID. Each control GUID identifies a unique provider. For example, if a driver defines two control GUIDs, one for a shared library and one for the driver, the library and the driver can be enabled as two different providers. Tracing can be enabled for either the library or the driver, or both.

I tried to created two header files, each with WPP_CONTROL_GUIDS using different guid. Then I include the different header files from c/cpp files which I expect to issue traces to the different providers. But it seems the definition in the main file override this seperation and all traces arrive to the provider used by it...

Any suggestion? Any sample? Thanks!!

Was it helpful?

Solution

I avoid WPP tracing like the plague now, but the trace templates provide an example of how to do this. You should see this comment somewhere in one of your TMH files:

// 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)   \
//    )  

So, you should be defining both GUIDs within the same WPP_CONTROL_GUIDS macro.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top