这似乎应该是一个简单的问题,但我不确定如何最好地解决它。我看过一些关于如何检测连接的设备是 USB 2 还是 USB 3 的帖子,但我需要知道 USB 3 端口是否可用,即使没有连接任何设备。
一种解决方案是遍历注册表中的“SYSTEM\CurrentControlSet\Services”键,并与已知 USB3 服务的预设列表进行比较。我希望有更准确的东西,比如 IOCTL 调用。
我可以实现 C++(首选)或 C#。
提前感谢您的帮助。
这是我如何实现它的。不是我正在寻找的解决方案。这基本上会告诉我系统上是否存在 USB 3.0 驱动程序。它不会检测系统上的硬件是否包括 USB 3.0 端口。更喜欢 C++ 中较低级别的东西。
如果有人能告诉我如何为此检测硬件(而不仅仅是渣而不是贡献),我将不胜感激。谢谢!
private bool IsUsb3()
{
string val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\USBXHCI", "ImagePath", 0);
if (val != null) return true; // Microsoft
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\USBHUB3", "ImagePath", 0);
if (val != null) return true; // Microsoft
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\usb3Hub", "ImagePath", 0);
if (val != null) return true; // Microsoft
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\UCX01000", "ImagePath", 0);
if (val != null) return true; // Microsoft
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\nusb3hub", "ImagePath", 0);
if (val != null) return true; // Renesas
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\nusb3xhc", "ImagePath", 0);
if (val != null) return true; // Renesas
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\iusb3xhc", "ImagePath", 0);
if (val != null) return true; // Intel
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\iusb3hub", "ImagePath", 0);
if (val != null) return true; // Intel
val = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\iusb3hcs", "ImagePath", 0);
if (val != null) return true;
return false;
}
这正是我想要的:
http://read.pudn.com/downloads105/sourcecode/windows/vxd/432626/USBLib/USB.cs__.htm
然后我添加了以下代码:
// Get USB information
bool supportsUsb3 = false;
System.Collections.ObjectModel.ReadOnlyCollection<USB.USBController> hostlist = null;
hostlist = USB.GetHostControllers();
mControllerCount = hostlist.Count;
foreach (USB.USBController host in hostlist)
{
USB.USBController controller = new USB.USBController();
controller.ControllerDevicePath = host.ControllerDevicePath;
USB.USBHub roothub = controller.GetRootHub();
System.Collections.ObjectModel.ReadOnlyCollection<USB.USBPort> portlist = null;
portlist = roothub.GetPorts();
foreach (USB.USBPort port in portlist)
{
USB.USBHub hub = port.GetHub();
if (port.PortSpeed == USBLib.USB.USB_DEVICE_SPEED.UsbSuperSpeed.ToString())
{
supportsUsb3 = true;
break;
}
}
if (supportsUsb3)
break;
}
我现在可以确定用户的 PC 是否有 USB 3.0 端口。如果他们只有 2.0 端口,那么我可以使用前面的代码来确定是否安装了 USB 3 驱动程序。