2010-02-01 17 views

Répondre

0

Vous pouvez changer les lettres assignées à vos disques quelque part dans le contrôle du système, de sorte que le disque flash peut être A :.

Utilisez l'API OS pour interroger par exemple. la taille du disque, cela devrait suffire à distinguer disquette et disque flash.

0

Il est possible de lier un disque flash à A :, mais uniquement si vous n'avez pas de lecteur de disquette. Voir Defining an MS-DOS Device Name pour plus d'informations sur la procédure à suivre dans un programme.

Vous pouvez déterminer si une lettre de lecteur correspond à une disquette en utilisant QueryDosDevice sur la lettre de lecteur. Les lecteurs de disquettes retourneront "\ Device \ Floppy0" ou "\ Device \ Floppy1"

+0

Notez que le '\ Device \' disquette les noms ne sont pas (toujours) utilisés pour les lecteurs de disquette USB. – MSalters

+0

@MSalters: Eh bien, c'est malheureux. Merci pour l'info. –

+0

Voir le pointk de stephan - il a la réponse. – MSalters

2

D'abord, vous devez obtenir le type de lecteur (GetDriveTypeA). Si le résultat est égal à DRIVE_REMOVABLE, le lecteur de lettre pointera soit vers une disquette d'un lecteur flash amovible (ou peut-être un autre type de disque amovible). Si le résultat n'est pas DRIVE_REMOVABLE, il n'y a aucune chance qu'il s'agisse d'un lecteur flash amovible. Cependant, méfiez-vous du point de vue Window a, il y a peu de différence entre un disque dur USB externe et un disque flash amovible (je pense que la seule différence est qu'un disque flash amovible n'a pas de table de partition, il n'en aura qu'un partition - bien que je ne sois pas très sûr). Quoi qu'il en soit, pour le type DRIVE_REMOVABLE, vous devez demander des propriétés plus avancées du périphérique. Pour ce faire, vous devez d'abord ouvrir l'appareil physique avec somethink comme ceci:

 

hDevice = CreateFileA("\\\\?\\X:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL) 
 

Si l'ouverture réussit, vous devez émettre une commande DeviceIoControl à ce dispositif:

 

STORAGE_PROPERTY_QUERY Query; 
Query.PropertyId = StorageDeviceProperty; 
Query.QueryType = PropertyStandardQuery; 

bResult = DeviceIoControl(
    hDevice, // device handle 
    IOCTL_STORAGE_QUERY_PROPERTY, // info of device property 
    &Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer 
    pDevDesc, pDevDesc->Size, // output data buffer 
    &dwOutBytes, // out's length 
    (LPOVERLAPPED)NULL 
    ); 

 

Si pDevDesc-> BusType == BusTypeUsb, puis X: pointe vers un lecteur flash amovible. Le code fonctionne, cependant vous devez lire la documentation de DeviceIoControl pour configurer le paramètre pDevDesc. Si vous avez des problèmes, je peux vous donner tout le code.

+0

Vraisemblablement pour un lecteur de disquette USB 'pDevDesc-> BusType == BusTypeUsb' aussi. – MSalters

+0

Oui, mais la question ne se référait pas aux lecteurs de disquettes USB: D – botismarius