【问题标题】:Windows XP : How to Get USB device location from the disk drive letterWindows XP : 如何从磁盘驱动器号获取 USB 设备位置
【发布时间】:2014-10-04 13:24:51
【问题描述】:

当我们连接 USB 大容量存储设备时,在设备管理器中会创建两个条目:一个在 Disk Drive 下,另一个在 USB 下作为 USB Mass Storage。

 HDEVINFO hDevInfo = SetupDiGetClassDevs(
                (LPGUID) &GUID_DEVCLASS_DISKDRIVE,      // USB Device Class
                NULL,
                NULL, 
                DIGCF_PRESENT); 

这将列出磁盘驱动器下的条目

 HDEVINFO hDevInfo = SetupDiGetClassDevs(
                (LPGUID) &GUID_DEVCLASS_USB,        // USB Device Class
                NULL,
                NULL,
                DIGCF_PRESENT);

这将列出所有 USB 设备。

有没有办法映射从上述两个调用中获得的条目。 我使用SetupDiEnumDeviceInfo检查了所有设备的设备实例ID, 但 id 不匹配

我需要映射这两个条目的原因是因为我必须获取 USB 设备位置(集线器和端口)编号

谢谢 普拉文

【问题讨论】:

    标签: c++ windows usb


    【解决方案1】:

    驱动器号与驱动器上的卷/分区相关联。当您在 Windows 中使用“安全断开连接”选项时,您会看到这一点,它会列出所有将被删除的实体。

    So, check the device parent.

    【讨论】:

      【解决方案2】:

      您可以使用 GUID_DEVINTERFACE_DISK 枚举物理磁盘设备。使用:

      SetupDiGetClassDevs
      (
          &GUID_DEVINTERFACE_DISK,
          NULL,
          NULL,
          DIGCF_PRESENT | DIGCF_DEVICEINTERFACE
      )
      

      然后,查询存储适配器描述符。

      STORAGE_PROPERTY_QUERY storageProperty;
      //...setup
      PSTORAGE_ADAPTER_DESCRIPTOR pstorageAdapterDesc;
      pstorageAdapterDesc = (PSTORAGE_ADAPTER_DESCRIPTOR)LocallAlloc( LPTR, storageDescHeader.Size );
      
      DeviceIoControl
      (
          handle,
          IOCTL_STORAGE_QUERY_PROPERTY,
          &storageProperty, 
          sizeof( STORAGE_PROPERTY_QUERY ),
          pstorageAdapterDesc,
          storageDescHeader.Size,
          bytesReturned,
          NULL
      )
      

      在描述符中,您可以使用“BusType”并检查 USB。

      【讨论】:

        猜你喜欢
        • 2022-11-01
        • 2011-10-02
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        相关资源
        最近更新 更多