如何在 C# 中读取 U 盘的 Superspeed 或 Highspeed

How to read Superspeed or Highspeed of a USB flash drive in C#

我在这个网站上找到了这个问题和答案:Detect if device is using USB 3.0 但是当我 运行 程序时,结果从来没有 return 建立超高速连接。我将 USB3.0 闪存驱动器插入 USB 3 端口,所以它对我来说应该是 return SuperSpeed。

完整代码如下来自<@Sani Huttunen>

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,

    }

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

由于向后兼容,SuperSpeed/USB3 设备返回报告为 HighSpeed/USB2,如果您确实需要知道设备是否超速,您需要使用:

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2

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

希望对您有所帮助