День добрый. Имеется список USB-устройств, полученный через SetupAPI и DeviceIOControl перечислением по всем хабам и портам. Для каждого устройства имеется его DevicePath (из DeviceDescriptor) и vid/pid. Нужно определить какая буква назначена данному устройству (если оно storage). Либо получить некий путь к устройству, который позволит открывать файлы на нем.
Если к примеру есть DEV_BROADCAST_VOLUME (полученная по WM_DEVICECHANGE/DBT_DEVICEARRIVAL), то: Код (Text): //Буква диска по битовой маске inline char FirstDriveFromMask (ULONG unitmask) { char i; for (i = 0; i < 26; ++i) { if (unitmask & 0x1) break; unitmask = unitmask >> 1; } return (i + 'A'); }
Я повторюсь. Список устройств УЖЕ есть. нужно пройтись по нему и ассоциировать каждое volume/storage устройство с буквой диска или любой другой строкой, которую можно использовать для открытия файлов на этом устройстве.
AKhranovskiy Сопоставление устройства может быть произведено по DeviceNumber (STORAGE_DEVICE_NUMBER). 1)С одной стороны оно может быть найдено запросом IOCTL_STORAGE_GET_DEVICE_NUMBER через DeviceIoControl - назовем эту функцию GetDeviceNumber (CreateFile-DeviceIoControl). 2)С другой сторону - при энумерации USB-устройств средствами setupapi (SetupDiGetClassDevs-SetupDiEnumDeviceInterfaces-SetupDiGetDeviceInterfaceDetail-GetDeviceNumber). В 1) случае вы перебираете подключенные диске (c,d,e) - а 2 пункт - то же, что у вас в #1 написано - и ищите соответствие DeviceNumber(1) и DeviceNumber(2).