Diferenciación programática entre la unidad de disquete USB y la unidad flash USB en Windows

En Windows (XP-7), ¿existe una forma confiable de diferenciar programáticamente entre las unidades de disquete USB y las unidades flash USB en C ++?

En este momento, estoy usando WMI para obtener actualizaciones cuando es nuevoWin32_LogicalDisk se detectan instancias y luego se usa el atributo DriveType del objeto LogicalDisk para descubrir un tipo básico. Esto funciona bastante bien, excepto que las unidades de disquete y las unidades flash USB son de DriveTypeDRIVE_REMOVABLE, para diferenciarlos (floppy vs. flash), estoy usando elIOCTL_STORAGE_GET_HOTPLUG_INFO interfaz para averiguar si el dispositivo es hotpluggable, y estaba trabajando en el principio de que eso significaba que era una unidad flash y no un disquete. Una vez más, creo que esto funciona bastante bien (aunque sea un poco ineficiente, utilizando tanto la API WDK como la WMI para obtener información) en el caso de las unidades de disquete internas, pero desafortunadamente las unidades de disquete USB también son hotpluggable muchas veces, así que hay No hay una forma clara de diferenciar entre las unidades de disquete flash y USB, que puedo ver. Sé que hay propiedades quemayo funciona, como verificar si está asignado a las unidades reservadas A: o B (edición: solo es relevante si la máquina definitivamente tiene una unidad de disquete - veaMS-KB: cómo cambiar las asignaciones de letras de unidad en Windows XP), o mirando la descripción, pero realmente me gustaría algo un poco más confiable.

Lo siento por la larga explicación, ¡pero solo quería ser claro! Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta