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

Windows XP : How to Get USB device location from the disk drive letter

本文关键字:USB 获取 位置 磁盘驱动器 XP Windows      更新时间:2023-10-16

当我们连接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,但是id不匹配

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

谢谢Praveen

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

检查设备父节点

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

在描述符中,您可以使用"busstype"并检查USB