Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Получить интерфейс GUID_DEVINTERFACE_DISK


Автор: Proxin 3.5.2019, 20:55
Добрый день! У меня стоит следующий вопрос: 
Я получаю список девайсов с GUID_DEVINTERFACE_USB_DEVICE через SetupDiEnumDeviceInfo->SetupDiEnumDeviceInterfaces. Как узнать, является ли данный юсб-девайс, который я в конекретный момент энумерую, диском и получить его нормальное имя, если оно есть ( \\HarddiskXXX )? Потому что с потому что с помощию detailinterfacedevicedata у меня сыпется на каждый девайс по несколько интерфейсов вида \\?\usb#vid_XXX&pidxxx, а в имени Dos что-то вида \Device\USBPDO-X.
Упд:
По CM_Get_Child можно получить USBSTOR\\, и уже от него плясать, но неужели придётся вызывать энам вольюмов в отдельной процедуре, или от ЮСБСТОР можно его как-то получить?
Упд2:
В общем, разобрался. Вкрадции:
С помощью SetupDiOpenDeviceInfo=>SetupDiDeviceGetRegistryProperty( SPDRP_PHYSICAL_DEVICE_OBJECT_NAME ) получаем имя физобекта, а потом через NtOpenFile и IOCTL_MOUNTDEV_QUERY_DEVICE_NAME и получаем что-то вида *\Device\Harddisk1\DR0.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)