@@ -44,6 +44,7 @@ struct ProviderFilter
4444 uint64_t allKeyMask;
4545 uint8_t maxLevel;
4646 GUID providerGuid;
47+ uint32_t controlCode;
4748 bool MatchesId (uint16_t eventId) const
4849 {
4950 return eventSet.empty () || eventSet.contains (eventId);
@@ -74,24 +75,25 @@ class Filter : public IFilterBuildListener
7475
7576 // NT_Process
7677 //
77- ProviderEnabled (NT_Process::GUID, 0 , 0 , EnableAllLevels);
78+ ProviderEnabled (NT_Process::GUID, 0 , 0 , EnableAllLevels, EVENT_CONTROL_CODE_ENABLE_PROVIDER );
7879
7980 // Microsoft_Windows_EventMetadata::GUID
8081 //
81- ProviderEnabled (Microsoft_Windows_EventMetadata::GUID, 0 , 0 , EnableAllLevels);
82+ ProviderEnabled (Microsoft_Windows_EventMetadata::GUID, 0 , 0 , EnableAllLevels, EVENT_CONTROL_CODE_ENABLE_PROVIDER );
8283 }
8384 // Inherited via IFilterBuildListener
8485 void EventAdded (uint16_t id) override
8586 {
8687 eventsOnDeck_.push_back (id);
8788 }
88- void ProviderEnabled (const GUID& providerGuid, uint64_t anyKey, uint64_t allKey, uint8_t maxLevel) override
89+ void ProviderEnabled (const GUID& providerGuid, uint64_t anyKey, uint64_t allKey, uint8_t maxLevel, uint32_t controlCode ) override
8990 {
9091 ProviderFilter filter{
9192 .anyKeyMask = anyKey ? anyKey : 0xFFFF'FFFF ,
9293 .allKeyMask = allKey,
9394 .maxLevel = maxLevel,
9495 .providerGuid = providerGuid,
96+ .controlCode = controlCode,
9597 };
9698 filter.eventSet .insert_range (eventsOnDeck_);
9799 ClearEvents ();
@@ -148,7 +150,7 @@ class EventCallback : public ITraceEventCallback
148150 // when trimming by timestamp, we must take care not to remove the state data psuedo-events generated
149151 // at the beginning of the trace (also true state events coming before the trim region)
150152 // nt process
151- stateFilter_.ProviderEnabled (NT_Process::GUID, 0 , 0 , EnableAllLevels);
153+ stateFilter_.ProviderEnabled (NT_Process::GUID, 0 , 0 , EnableAllLevels, EVENT_CONTROL_CODE_ENABLE_PROVIDER );
152154 // dxgkrnl --> DCs
153155 stateFilter_.EventAdded (Microsoft_Windows_DxgKrnl::Context_DCStart::Id);
154156 stateFilter_.EventAdded (Microsoft_Windows_DxgKrnl::Device_DCStart::Id);
@@ -162,11 +164,11 @@ class EventCallback : public ITraceEventCallback
162164 stateFilter_.EventAdded (Microsoft_Windows_DxgKrnl::HwQueue_DCStart::Id);
163165 stateFilter_.EventAdded (Microsoft_Windows_DxgKrnl::HwQueue_Start::Id);
164166 // <-- finish
165- stateFilter_.ProviderEnabled (Microsoft_Windows_DxgKrnl::GUID, 0 , 0 , EnableAllLevels);
167+ stateFilter_.ProviderEnabled (Microsoft_Windows_DxgKrnl::GUID, 0 , 0 , EnableAllLevels, EVENT_CONTROL_CODE_ENABLE_PROVIDER );
166168 // kernel proc start/stop
167169 stateFilter_.EventAdded (Microsoft_Windows_Kernel_Process::ProcessStart_Start::Id);
168170 stateFilter_.EventAdded (Microsoft_Windows_Kernel_Process::ProcessStop_Stop::Id);
169- stateFilter_.ProviderEnabled (Microsoft_Windows_Kernel_Process::GUID, 0 , 0 , EnableAllLevels);
171+ stateFilter_.ProviderEnabled (Microsoft_Windows_Kernel_Process::GUID, 0 , 0 , EnableAllLevels, EVENT_CONTROL_CODE_ENABLE_PROVIDER );
170172 }
171173 STDMETHODIMP QueryInterface (const IID& iid, void ** pObj)
172174 {
0 commit comments