Windows XP: Как узнать местоположение USB-устройства по букве диска

0

Когда мы подключаем запоминающее устройство 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

Теги:
usb

2 ответа

0
Лучший ответ

Буква диска связана с томом/разделом на диске. Вы увидите это, когда вы используете опцию "безопасное отсоединение" в Windows, где она отобразит все объекты, которые будут удалены.

Итак, проверьте родительский элемент устройства.

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню