in krabs/krabs/kt.hpp [122:147]
inline void kt::enable_providers(
const krabs::trace<krabs::details::kt> &trace)
{
EVENT_TRACE_GROUPMASK_INFORMATION gmi = { 0 };
gmi.EventTraceInformationClass = EventTraceGroupMaskInformation;
gmi.TraceHandle = trace.registrationHandle_;
// initialise EventTraceGroupMasks to the values that have been enabled via the trace flags
ULONG status = NtQuerySystemInformation(SystemPerformanceTraceInformation, &gmi, sizeof(gmi), nullptr);
error_check_common_conditions(status);
auto group_mask_set = false;
for (auto& provider : trace.providers_) {
auto group = provider.get().group_mask();
PERFINFO_OR_GROUP_WITH_GROUPMASK(group, &(gmi.EventTraceGroupMasks));
group_mask_set |= (group != 0);
}
if (group_mask_set) {
// This will fail on Windows 7, so only call it if truly neccessary
status = NtSetSystemInformation(SystemPerformanceTraceInformation, &gmi, sizeof(gmi));
error_check_common_conditions(status);
}
return;
}