정적 라이브러리에서 WPP를 사용할 어떻게 할까요? 있나요?
WPP 추적은 정적 라이브러리(.lib)와 이를 사용하는 이진(.exe, .dll 또는 .sys) 간의 추적에 대한 별도의 제어를 제공하는 방식으로 정적 라이브러리 내에서 사용할 수 있습니다.
이진 파일과 라이브러리에는 모두 고유한 컨트롤 GUID가 있습니다. 이렇게 하면 정적 라이브러리, 이진 파일 또는 둘 다에서 추적을 사용하도록 설정할 수 있습니다.
다음 코드 예제와 같이 여러 지점에서 WPP를 사용하여 .lib 파일에 액세스할 수 있습니다. 정적 라이브러리가 ETW를 사용하여 실제 등록을 수행하는 WPP_INIT_TRACING 매크로를 호출하지 않으므로 컨트롤 GUID의 실제 값을 정의하는 것은 중요하지 않습니다.
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(mylib,(0,0,0,0,0), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
)
라이브러리를 사용하는 .dll, .exe 및 .sys 파일은 WPP에 공급자를 등록하는 WPP_INIT_TRACING 호출해야 합니다. 매크로 WPP_INIT_TRACING 호출하는 이진 파일에는 WPP_CONTROL_GUID 매크로에서 가져온 WPP 컨트롤 GUID의 복사본이 있어야 합니다. 플래그 값의 복사본은 정적 라이브러리에 정의된 플래그가 이진 파일에서도 사용되도록 계획된 경우에만 필요합니다.
다음 코드 샘플에서는 정적 라이브러리의 컨트롤 GUID가 먼저 선언되고 컨트롤 GUID의 플래그가 라이브러리에 정의된 플래그와 일치합니다.
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(SharedStaticLibs,(81b20feb,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
) \
WPP_DEFINE_CONTROL_GUID(AppSpecificFlags,(81b20fec,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(EntryExit) \
WPP_DEFINE_BIT(Initialization) \
WPP_DEFINE_BIT(MemoryAllocations) \
)
.lib 및 .exe 파일에 대한 별도의 컨트롤 GUID를 각각 고유한 플래그와 함께 지정하거나 둘 다에 대해 하나의 컨트롤 GUID를 지정하여 구성 요소와 정적 라이브러리 모두에서 추적에 필요한 제어 수준을 선택할 수 있습니다. 샘플에서 .exe 파일은 .lib 파일과 동일한 플래그를 사용합니다.