Программно дифференцирование между USB Floppy Drive и USB Flash Drive в Windows

StackOverflow https://stackoverflow.com/questions/1797128

  •  22-09-2019
  •  | 
  •  

Вопрос

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

На данный момент я использую WMI, чтобы получить обновления, когда новые Win32_LogicalDisk Обнаружены экземпляры, а затем с использованием атрибута DriveType объекта LogicalDisk для выяснения основного типа. Это работает довольно хорошо, за исключением того, что гибкие диски и USB -флэш -накопители оба из DriveType DRIVE_REMOVABLE, чтобы различать эти (гибкие и вспышки), я использую IOCTL_STORAGE_GET_HOTPLUG_INFO Интерфейс, чтобы выяснить, является ли устройство горячее, и работал над принципалом, что это означало, что это был флэш -накопитель, а не дискета. Опять же, я думаю, что это работает довольно хорошо (если немного неэффективно, используя как WDK API, так и WMI для получения информации) в случае внутренних дискет Нет четкого способа различения между Flash и USB -гибкими дисками, которые я вижу. Я знаю, что есть свойства, которые май Работа, например, проверка, нанес ли он сопоставлен с зарезервированными дисками A: или B (редактировать: ТОЛЬКО УДИВАЕТСЯ, только если у машины определенно есть гибкий диск - см. MS-KB: как изменить назначения букв с диска в Windows XP), или глядя на описание, но я бы очень хотел что -то более надежное.

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

Это было полезно?

Решение

Вы пробовали win32_logicaldisk.mediatype? У него есть особые перечисления для дисководов. Убедитесь, что вы попробуете, когда в драйве нет диска.

Другие советы

На уровне USB нет способа различить обычный диск на ключе и USB-флоппи. Что означает сами Windows, не может достоверно сказать, что есть.

Есть несколько подсказок, которые вы можете собрать: флопы должны: a. Иметь протокол массового хранения CBI/CB B. Scsi ufi

Но в мире USB -устройств все делают все, что хотят. Единственный тест: «работает ли он на Windows». И Windows просто проверяет размер, если это USB-устройство со съемным средним набором и с обычными гибкими размерами, оно считает его гибкой.

Не могу сказать о «настоящем» дискете, но с прикрепленным USB нет определенного способа.

Вы можете использовать атрибут Size (USB> 1,4 МБ), не так, как в ближайшее время есть шанс встретиться с 1,4 МБ.

Очевидное свойство для проверки будет IOCTL_DISK_GET_DRIVE_GEOMETRY. Анкет Это заставляет вас (среди прочего) MEDIA_TYPE. Анкет Все, кроме RemovableMedia а также FixedMedia это дискета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top