当我们连接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设备位置(集线器和端口)编号
由于 普利文
答案 0 :(得分:0)
驱动器号与驱动器上的卷/分区相关联。当您使用"安全断开"时,您会看到这一点。 Windows中的选项,它将列出将要删除的所有实体。
答案 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。