Determiner le physical drive d'un volume monté

anisZ007 Messages postés 3 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 22 mai 2008 - 20 mai 2008 à 13:50
anisZ007 Messages postés 3 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 22 mai 2008 - 22 mai 2008 à 02:29
Slt à tous,

J'ecris un programme qui permet de lister l'ensemble des volumes montés j'utilise pour ca les fct de l'API Windows (FindFirstVolumeMountPoint ...)
Mais j'arrive pas à récupérer le disque auquel appartient ce volume monté. J'utilise IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS mais je n’arrive pas car lorsque je crée  le Handle avec createFile en donnant le chemin  du répertoire dans lequel le volume est monté il me retourne toujours INVALID_HANDLE_VALUE.

Est ce que quelqu'un à une idée?
Merci.

4 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
20 mai 2008 à 16:33
T'utilises la syntaxe correcte pour CreateFile()?
Par exemple pour le disque C: faut passer en argument[file://\\.\C \\.\C]: (soit en code \\\\.\\C:")
0
anisZ007 Messages postés 3 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 22 mai 2008
20 mai 2008 à 16:49
Pour les volumes telque C:,D: ca marche
Pour les "volume mount points" qui sont montés dans des repertoire par exemple je monte D: sous C:\mnt\Ddrive
j'ai testé les syntaxes suisvantes : "C:\mnt\Ddrive" ,  [file://\\.\C\mnt\lecteurD "\\.\C\mnt\Ddrive]" ou avec  la chaine retourné par GetVolumeNameForVolumeMountPoint
Mais ca marche pas

PS : Je parle des Volume Mount Points
http://msdn.microsoft.com/en-us/library/aa365733(VS.85).aspx

Merci D'avance
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
20 mai 2008 à 21:07
Bof ça m'apprendra à répondre sans réfléchir...


effectivement le mieux je pense c'est d'utiliser GetVolumeNameForVolumeMountPoint().
Ca n'a pas marché chez toi car GetVolumeEtc() retourne un nom sous ce format :
\\?\Volume{...}\
alors que CreateFile() n'accepte pas (pour les volumes) de terminaison en \, il faut lui passer simplement
\\?\Volume{...}
sinon il croit que c'est la racine enfin bref.

facile :
GetVolumeNameEtc(L"C:",pBuffer,...);
pBuffer[48]=0;
CreateFile(pBuffer,...);

pas d'inquiétude sur l'index car le nom de volume a toujours la même taille.
0
anisZ007 Messages postés 3 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 22 mai 2008
22 mai 2008 à 02:29
Salut,
Merci beaucoup ca marche avec GetVolumeNameForVolumeMountPoint

PS: ça m'apprendra moi aussi à bien lire la doc...
0