Pregunta

En Windows (XP-7), hay una manera fiable de diferenciar entre programáticamente unidades de disquete USB y unidades flash USB en C ++?

Por el momento, estoy usando WMI para obtener actualizaciones cuando el nuevo casos Win32_LogicalDisk se detectan, a continuación, utilizando el atributo DriveType del objeto LogicalDisk de averiguar un tipo básico. Este funciona bastante bien, excepto que las unidades de disquete y unidades flash USB son ambos DRIVE_REMOVABLE DriveType, por lo que para diferenciar entre aquellos (disquete flash de frente), estoy usando la IOCTL_STORAGE_GET_HOTPLUG_INFO interfaz de averiguar si el dispositivo es de conexión en caliente, y estaba trabajando en el principio de que eso significaba que era una unidad flash y no una flexible. Una vez más, creo que esto funciona bastante bien (aunque un poco ineficiente, utilizando tanto la API WDK y WMI para obtener información) en el caso de unidades de disco internas, pero desafortunadamente las unidades de disquete son también de conexión en caliente de una gran parte del tiempo, por lo que hay hay una forma clara de diferenciar entre las unidades flash USB y disquetes, que yo pueda ver. Sé que hay propiedades que puede de trabajo, como la comprobación de si la asignada a la unidades reservada A: o B (edit: sólo es relevante si la máquina sin duda tiene una unidad de disquete - vea MS-KB: Cómo asignaciones de letras de cambio de unidad en Windows XP ), o buscando en la descripción, pero me gustaría mucho como algo un poco más fiable.

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

¿Fue útil?

Solución

¿Usted intentó Win32_LogicalDisk.MediaType? Tiene enumeraciones específicas para los disquetes. No deje de probar que cuando no hay disco en la unidad.

Otros consejos

En el nivel USB, no hay manera de diferenciar entre un disco convencional de clave y un disquete USB. El cual el propio Windows medios, no se puede saber de manera fiable qué es qué.

Existen algunos indicios de que puede reunir: Disquetes deben: a. Tienes protocolo de almacenamiento masivo CBI / CB si. SCSI UFI

Pero, en el mundo de los dispositivos USB, todo el mundo hace lo que quiere. La única prueba es: "¿Funciona en Windows". Y de Windows sólo comprueba el tamaño, si es un dispositivo USB con el conjunto de medios extraíbles y con tamaños de disquetes convencionales, se considera ser un disquete.

No se puede decir acerca de disquete "real", pero con el USB conectado, no hay manera definitiva.

Puede utilizar el atributo Tamaño (USB> 1,4 MB), no es que hay alguna posibilidad de conocer el flash de 1,4 MB conducir el corto plazo.

La propiedad obvio para verificación sería IOCTL_DISK_GET_DRIVE_GEOMETRY. Esto se consigue (entre otras cosas) un MEDIA_TYPE. Cualquier cosa menos RemovableMedia y FixedMedia es un disquete.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top