@@ -238,7 +238,7 @@ bool CUsbDkControlDevice::ShouldHide(const USB_DEVICE_DESCRIPTOR &DevDescriptor)
238
238
{
239
239
auto Hide = false ;
240
240
241
- const_cast <HideRulesSet*>(&m_HideRules)-> ForEach ( [&DevDescriptor, &Hide](CUsbDkHideRule *Entry) -> bool
241
+ const auto &HideVisitor = [&DevDescriptor, &Hide](CUsbDkHideRule *Entry) -> bool
242
242
{
243
243
if (Entry->Match (DevDescriptor))
244
244
{
@@ -247,7 +247,10 @@ bool CUsbDkControlDevice::ShouldHide(const USB_DEVICE_DESCRIPTOR &DevDescriptor)
247
247
}
248
248
249
249
return true ;
250
- });
250
+ };
251
+
252
+ const_cast <HideRulesSet*>(&m_HideRules)->ForEach (HideVisitor);
253
+ const_cast <HideRulesSet*>(&m_PersistentHideRules)->ForEach (HideVisitor);
251
254
252
255
return Hide;
253
256
}
@@ -424,7 +427,7 @@ NTSTATUS CUsbDkControlDevice::Register()
424
427
if (NT_SUCCESS (status))
425
428
{
426
429
FinishInitializing ();
427
- LoadPersistentHideRules ();
430
+ ReloadPersistentHideRules ();
428
431
}
429
432
430
433
return status;
@@ -637,7 +640,7 @@ NTSTATUS CUsbDkControlDevice::AddRedirect(const USB_DK_DEVICE_ID &DeviceId, PHAN
637
640
return STATUS_SUCCESS;
638
641
}
639
642
640
- NTSTATUS CUsbDkControlDevice::AddHideRule (const USB_DK_HIDE_RULE &UsbDkRule)
643
+ NTSTATUS CUsbDkControlDevice::AddHideRuleToSet (const USB_DK_HIDE_RULE &UsbDkRule, HideRulesSet &Set )
641
644
{
642
645
TraceEvents (TRACE_LEVEL_INFORMATION, TRACE_CONTROLDEVICE, " %!FUNC! entry" );
643
646
@@ -656,14 +659,14 @@ NTSTATUS CUsbDkControlDevice::AddHideRule(const USB_DK_HIDE_RULE &UsbDkRule)
656
659
return STATUS_INSUFFICIENT_RESOURCES;
657
660
}
658
661
659
- if (!m_HideRules .Add (NewRule))
662
+ if (!Set .Add (NewRule))
660
663
{
661
664
TraceEvents (TRACE_LEVEL_ERROR, TRACE_CONTROLDEVICE, " %!FUNC! failed. Hide rule already present." );
662
665
return STATUS_OBJECT_NAME_COLLISION;
663
666
}
664
667
665
668
TraceEvents (TRACE_LEVEL_INFORMATION, TRACE_CONTROLDEVICE, " %!FUNC! Current hide rules:" );
666
- m_HideRules .Dump ();
669
+ Set .Dump ();
667
670
668
671
NewRule.detach ();
669
672
return STATUS_SUCCESS;
@@ -672,9 +675,7 @@ NTSTATUS CUsbDkControlDevice::AddHideRule(const USB_DK_HIDE_RULE &UsbDkRule)
672
675
void CUsbDkControlDevice::ClearHideRules ()
673
676
{
674
677
m_HideRules.Clear ();
675
- TraceEvents (TRACE_LEVEL_INFORMATION, TRACE_CONTROLDEVICE, " %!FUNC! All hide rules dropped." );
676
- TraceEvents (TRACE_LEVEL_INFORMATION, TRACE_CONTROLDEVICE, " %!FUNC! Reloading persistent hide rules." );
677
- LoadPersistentHideRules ();
678
+ TraceEvents (TRACE_LEVEL_INFORMATION, TRACE_CONTROLDEVICE, " %!FUNC! All dynamic hide rules dropped." );
678
679
}
679
680
680
681
class CHideRulesRegKey final : public CRegKey
@@ -825,8 +826,10 @@ class CRegHideRule final : private CRegKey
825
826
}
826
827
};
827
828
828
- NTSTATUS CUsbDkControlDevice::LoadPersistentHideRules ()
829
+ NTSTATUS CUsbDkControlDevice::ReloadPersistentHideRules ()
829
830
{
831
+ m_PersistentHideRules.Clear ();
832
+
830
833
CHideRulesRegKey RulesKey;
831
834
auto status = RulesKey.Open ();
832
835
if (NT_SUCCESS (status))
@@ -839,7 +842,7 @@ NTSTATUS CUsbDkControlDevice::LoadPersistentHideRules()
839
842
if (NT_SUCCESS (Rule.Open (RulesKey, *Name)) &&
840
843
NT_SUCCESS (Rule.Read (ParsedRule)))
841
844
{
842
- AddHideRule (ParsedRule);
845
+ AddPersistentHideRule (ParsedRule);
843
846
}
844
847
});
845
848
}
0 commit comments