禁用特定的USB存储设备C#

我正在开发一个项目,需要启用/禁用特定的USB存储设备。

我的应用程序获取所有的存储USB设备ID,并根据保存的设置,然后需要允许设备或不。 我已经使用这个问题的代码来启用/禁用,并像这样调用它:

DisableHardware.DisableDevice(n => n.ToUpperInvariant().Contains(VidPid), true); 

string VidPid = "VID_8564&PID_1000"; 。 直到SetupDIChangeState调用,然后返回-536870389(E000020B作为hex)作为错误代码(来自Marshall.GetLastWin32Error() ),我已经逐步完成代码,它完全工作(据我所知)。

显然这是指1)该设备不存在(据我所知在这里是不是这种情况,因为在这个类的所有其他调用工作正常,我得到`VidPid'从

 private static List<WMUBClasses.USBDeviceInfo> GetUSBDevices() { try { List<WMUBClasses.USBDeviceInfo> tList = new List<WMUBClasses.USBDeviceInfo>(); ManagementObjectCollection collection; using (var searcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_USBHub")) { collection = searcher.Get(); } foreach (var device in collection) { if (!device.GetPropertyValue("Description").ToString().Contains("Storage")) { continue; } tList.Add(new WMUBClasses.USBDeviceInfo( (string)device.GetPropertyValue("DeviceID"), (string)device.GetPropertyValue("PNPDeviceID"), (string)device.GetPropertyValue("Description") )); } return tList; } catch (Exception ex) { return null; } } 

或2)不正确的构build平台,但我已经尝试了所有不同的组合(任何CPU,混合平台,x86和x64),他们都返回相同的结果。

我也看过这是另一种解决我的问题的方法(通过创build和使用内核模式filter驱动程序),它就像是用一个破坏的球来杀死苍蝇。 说实话,我不知道如何去使用它(对于没有做过任何驱动程序开发的人来说,看起来超级恐吓,特别是在阅读了一些可用的文档之后)。

我应该(A)继续使用SetupDi API调用来实现我的目标吗?如果有的话,任何人都可以看到代码有什么问题或我如何使用它? 如果没有(A),我应该(B)使用filter驱动程序的方法,如果是这样,任何指针?

正如标题所述,我想禁用特定的USB存储设备,据我所知,这排除了使用registry来禁用所有的USB存储设备。 所以如果两者都不是,有没有人有其他方向我应该看?