我在此站点的以下位置找到了此问题和答案:Detect if device is using USB 3.0
但是当我运行程序时,结果从未返回SuperSpeed连接。我将USB3.0闪存驱动器插入USB 3端口,因此应该可以将SuperSpeed返回给我。

完整的代码是中的以下代码

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Diagnostics;

class MainCode
{
private static void Main(string[] args)
{

    var hostCtrls = USB.GetHostControllers();

    foreach (var hostCtrl in hostCtrls)
    {
        var hub = hostCtrl.GetRootHub();
        foreach (var port in hub.GetPorts())
        {
            if (port.IsDeviceConnected && !port.IsHub)
            {
                var device = port.GetDevice();
                Console.WriteLine("Serial: " + device.DeviceSerialNumber);
                Console.WriteLine("Speed:  " + port.Speed);
                Console.WriteLine("Port:   " + device.PortNumber + Environment.NewLine);
            }
        }
    }
}
}


还有这里的图书馆:
http://read.pudn.com/downloads105/sourcecode/windows/vxd/432626/USBLib/USB.cs__.htm

在库中,我看到它们只有:

enum USB_DEVICE_SPEED : byte
    {
        UsbLowSpeed,
        UsbFullSpeed,
        UsbHighSpeed,

    }


这里的问题是如何读取USB闪存驱动器的正确速度。使用上面的代码和库,我在USB 3端口中的USB 3.0闪存驱动器始终返回Highspeed而不是Superspeed。

最佳答案

由于向后兼容,SuperSpeed / USB3设备会报告为HighSpeed / USB2,如果您真的需要知道该设备是否为Super speed,则需要使用:

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2

https://msdn.microsoft.com/en-us/library/windows/hardware/hh450861(v=vs.85).aspx

我希望这有帮助

08-04 21:12