Программное различие между USB-дисководом и USB-флешкой в Windows

В Windows (XP-7) существует ли надежный способ программной дифференциации между USB-дисководами гибких дисков и USB-накопителями в C ++?

На данный момент яиспользую WMI для получения обновлений при появлении новыхWin32_LogicalDisk экземпляры обнаруживаются, а затем с помощью атрибута DriveType объекта LogicalDisk выясняют базовый тип. Это работает довольно хорошо, за исключением того, что флоппи-дисководы и USB-флешки имеют DriveTypeDRIVE_REMOVABLEтак что, чтобы различать те (дискеты и флэш), ям, используяIOCTL_STORAGE_GET_HOTPLUG_INFO Интерфейс, чтобы выяснить, является ли устройство горячим подключением, и работало на основном, что означало, что это была флешка, а не дискета. Опять же, я думаю, что это работает довольно хорошо (если немного неэффективно, используя и API WDK, и WMI для получения информации) в случае внутренних дисководов, но, к сожалению, USB-дисководы гибких дисков также можно подключать в большинстве случаев, поэтому Я не вижу четкого различия между флеш-накопителем и USB-дисководом. Я знаю, что есть свойства, которыеможет работать, например, проверять, подключен ли он к зарезервированным дискам A: или B (редактировать: актуально, только если на машине определенно есть дисковод гибких дисков - см.MS-KB: как изменить назначение букв дисков в Windows XP), или, глядя на описание, но яя действительно хотел что-то более надежное

Извините за длинное объяснение, но просто хотел быть ясным! Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос