Тривиальная задача: подключаем в Windows USB-носитель, на рабочем столе отображается ярлык.
На данный момент узнаю о подключении устройства через сообщение WM_DEVICECHANGE. Соответственно, получаю структуры
DEV_BROADCAST_DEVICEINTERFACE и
DEV_BROADCAST_HDR. Вопрос, как узнать метку диска, связанную с устройством, исходя из того, что имею? Копал в сторону функции DeviceIoControl, но как ни вертел, получалась ошибка 50 (некорректный запрос). Также рассматривал вариант хранить метки дисков в массиве wchar_t, а при подключении проходить по списку устройств и узнавать, какая буква добавлена, но такой вариант мне кажется не совсем элегантным =)
З.Ы. Через CreateFile получаю дескриптор устройства:
// rawPath = L"\\?\USB#VID_0951&PID_1625#0019E06B0845A93187600199#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"
HANDLE hf = CreateFile(rawPath, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
Вообще делал для работы с DeviceIoControl, но вдруг есть метод обойтись без этой функции с использованием HANDLE устройства.