如果您尝试注册已经注册的提供程序,则注册将失败。
不清楚"提供程序(provider)"是指GUID还是由hProvider
表示的对象。有人能否确认以下操作是否有效:
1. 在多个进程中注册相同的GUID
2. 在同一进程中的多个模块(DLL/EXE)中注册相同的GUID
3. 在同一模块内注册相同的GUID?
我已经尝试了{1}和{2},它们都可以工作-我可以从进程/模块中获取事件。只需要确保这是预期行为即可。
如果您尝试注册已经注册的提供程序,则注册将失败。
不清楚"提供程序(provider)"是指GUID还是由hProvider
表示的对象。有人能否确认以下操作是否有效:
1. 在多个进程中注册相同的GUID
2. 在同一进程中的多个模块(DLL/EXE)中注册相同的GUID
3. 在同一模块内注册相同的GUID?
我已经尝试了{1}和{2},它们都可以工作-我可以从进程/模块中获取事件。只需要确保这是预期行为即可。
我认为它指的是句柄对象本身。
TraceLogging提供程序句柄的范围严格限制在定义它的模块(DLL或EXE)中。一个模块中的提供程序句柄不得与其他模块中的代码共享。换句话说,对于任何句柄g_hProvider,所有的TraceLoggingWrite(g_hProvider, ...)实例必须驻留在与TRACELOGGING_DEFINE_PROVIDER(g_hProvider, ...)定义相同的EXE或DLL中。如果不遵循此规则,则TraceLoggingWrite的行为是不可预测的,特别是关于它处理事件ID的方式(例如,事件ID冲突很可能发生)。
TraceLoggingProvider.h
中的注释。
TRACELOGGING_DEFINE_PROVIDER
定义的hProvider
。TRACELOGGING_DEFINE_PROVIDER
(每个都有不同的变量名)。它们中的每一个都是一个独立的提供者句柄,可以单独注册和注销。