这似乎应该是一个简单的问题,但我不确定如何最好地解决它。我已经看过一些关于如何检测连接设备是USB 2还是3的帖子,但是我需要知道USB 3端口是否可用,即使没有连接任何设备。
一种解决方案是遍历“SYSTEM \ CurrentControlSet \ Services'密钥在注册表中,并与预先设定的已知USB3服务列表进行比较。我希望有一些像IOCTL电话更准确的东西。
我可以实现C ++(首选)或C#。
提前感谢您的帮助。
答案 0 :(得分:1)
以下是我实现此方法的方法。不是我正在寻找的解决方案。这基本上会告诉我系统上是否有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;
}
答案 1 :(得分:0)
这正是我所寻找的:
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驱动程序。