Windows XP:如何从磁盘驱动器号获取USB设备位置

时间:2014-08-11 16:27:03

标签: c++ windows usb

当我们连接USB大容量存储设备时,在设备管理器中创建两个条目:一个在磁盘驱动器下,另一个在USB下作为USB大容量存储。

 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, 但是ids不符合

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

由于 普利文

2 个答案:

答案 0 :(得分:0)

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

So, check the device parent.

答案 1 :(得分:0)

您可以使用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。