Programmgesteuertes Unterscheiden zwischen USB-Diskettenlaufwerk und USB-Flash-Laufwerk in Windows
Gibt es unter Windows (XP-7) eine zuverlässige Möglichkeit, programmgesteuert zwischen USB-Diskettenlaufwerken und USB-Flash-Laufwerken in C ++ zu unterscheiden?
Im Moment verwende ich WMI, um Updates zu erhalten, wenn es neu istWin32_LogicalDisk
Instanzen werden erkannt und anschließend mit dem DriveType-Attribut des LogicalDisk-Objekts ein Basistyp ermittelt. Dies funktioniert recht gut, außer dass sowohl Diskettenlaufwerke als auch USB-Flash-Laufwerke vom Typ DriveType sindDRIVE_REMOVABLE
, um zwischen diesen zu unterscheiden (Floppy vs. Flash), benutze ich dieIOCTL_STORAGE_GET_HOTPLUG_INFO
Schnittstelle, um herauszufinden, ob das Gerät Hot-Plug-fähig ist, und arbeitete nach dem Prinzip, dass dies bedeutete, dass es ein Flash-Laufwerk und keine Diskette war. Wiederum denke ich, dass dies bei internen Diskettenlaufwerken recht gut funktioniert (wenn auch ein wenig ineffizient, wenn sowohl die WDK-API als auch WMI zum Abrufen von Informationen verwendet werden), aber leider sind USB-Diskettenlaufwerke häufig auch hot-plug-fähig Es gibt keine eindeutige Unterscheidung zwischen Flash- und USB-Diskettenlaufwerken, die ich sehen kann. Ich weiß, dass es Eigenschaften gibt, diekann B. zu prüfen, ob es den reservierten Laufwerken A: oder B zugeordnet ist (Bearbeiten: Nur relevant, wenn der Computer definitiv ein Diskettenlaufwerk hat - sieheMS-KB: Ändern der Laufwerksbuchstaben in Windows XP) oder in der Beschreibung nachsehen, aber ich hätte wirklich gerne etwas zuverlässigeres.
Entschuldigung für die lange Erklärung, aber wollte nur klar sein! Vielen Dank