Когда мы подключаем запоминающее устройство USB, в Диспетчере устройств создаются две записи: одна под Диском и другая под 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
, но идентификаторы не совпадали
Причина, по которой мне нужно сопоставить эти две записи, состоит в том, что мне нужно получить номер устройства USB (Hub and Port)
Спасибо, 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
)
В дескрипторе вы можете использовать "BusType" и проверить USB.