Регистрация одного и того же GUID поставщика трассировки журналов ETW из нескольких процессов и в одном процессе

Из документации по TraceLogging:

Если вы попытаетесь зарегистрировать поставщика, который уже зарегистрирован, регистрация завершится ошибкой.

Неясно, относится ли «поставщик» к GUID или к объекту, представленному hProvider. Может ли кто-нибудь подтвердить, является ли допустимой операция регистрации одного и того же GUID из 1. нескольких процессов 2. нескольких модулей (DLL/EXE) в одном процессе 3. в одном модуле?

Я пробовал {1} и {2}, и они работали - я могу получать события из обоих процессов/модулей. Просто нужно убедиться, что это ожидаемое поведение.


person anik3th    schedule 07.02.2019    source источник
comment
Я также заинтересован в этом.   -  person rnd_nr_gen    schedule 17.11.2020


Ответы (1)


Я бы сказал, что это относится к самому объекту handle.

The scope of a TraceLogging provider handle is strictly limited to the module (the DLL or EXE) in which it is defined. The provider handle from one module must not be shared with code in other modules. In other words, for any handle g_hProvider, all instances of TraceLoggingWrite(g_hProvider, ...) must reside in the same EXE or DLL as the TRACELOGGING_DEFINE_PROVIDER(g_hProvider, ...) definition. If this rule is not followed, the behavior of TraceLoggingWrite is unpredictable, especially regarding the way it handles event IDs (e.g. event ID collisions are likely).

комментарий в TraceLoggingProvider.h

person rnd_nr_gen    schedule 18.11.2020