【问题标题】:How to read Superspeed or Highspeed of a USB flash drive in C#如何在 C# 中读取 USB 闪存驱动器的超高速或高速
【发布时间】:2015-01-28 23:18:05
【问题描述】:

我在这个网站上找到了这个问题和答案: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,

    }

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

【问题讨论】:

    标签: c# usb enumeration


    【解决方案1】:

    由于向后兼容,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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2019-06-22
      • 1970-01-01
      相关资源
      最近更新 更多