inline void kt::enable_providers()

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;
    }