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

时间:2015-10-12 10:15:11

标签: c# .net windows usb

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

我的应用获取所有存储USB DeviceID,并且根据保存的设置,然后需要允许设备。我使用了this上一个问题的代码来启用/禁用,并将其调用为:

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

string VidPid = "VID_8564&PID_1000";。 我已经完成了代码,它完全正常工作(据我所知),直到SetupDIChangeState调用,然后返回-536870389(E000020B为十六进制)作为错误代码(来自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)一个不正确的构建平台,但我尝试了所有不同的组合(任何CPU,混合平台,x86和x64),它们都返回相同的结果。

我还看了this这是解决我问题的另一种方法(通过创建和使用内核模式过滤器驱动程序),它似乎就像用一个破坏球杀死一只苍蝇。说实话,我不知道如何使用它(对于没有进行任何驱动程序开发的人来说,它看起来非常令人生畏,特别是在阅读了一些可用的文档之后。)

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

如标题中所述,我想禁用特定的USB存储设备,据我所知,这排除了使用注册表禁用所有USB存储设备。所以,如果上述情况都没有,那么我是否应该有任何其他指示呢?

0 个答案:

没有答案