Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mapping entre les lecteurs logiques et les device physique usb

6 réponses
Avatar
bertrand doradoux
Salut .
Je vous explique mon probleme , voila j'arrive a leur actuelle a enumere
tous les devices de stockages de masse USB en passant par des fonctions
telles que CreateFile et DeviceIocontrol. En revanche je n'arrive pas a
savoir de qu'elle maniere je peux retrouver la lettre de lecteur logique
associé a device physique. si quelqu'un pouvait me donner ne serait ce qu'un
debut de réponse cela me rendrait un grand service.

D'avance merci a tous.

6 réponses

Avatar
Christian ASTOR
bertrand doradoux wrote:

Je vous explique mon probleme , voila j'arrive a leur actuelle a enumere
tous les devices de stockages de masse USB en passant par des fonctions
telles que CreateFile et DeviceIocontrol. En revanche je n'arrive pas a
savoir de qu'elle maniere je peux retrouver la lettre de lecteur logique
associé a device physique. si quelqu'un pouvait me donner ne serait ce qu'un
debut de réponse cela me rendrait un grand service.



Il y a entre autres GetVolumePathNamesForVolumeName()
Par ex, sur mon poste,
"\?Volume{c3438222-a8ed-11d9-93b6-806d6172696f}"
me donne "G:"
Avatar
azertyuiop
Christian ASTOR a écrit :
bertrand doradoux wrote:

Je vous explique mon probleme , voila j'arrive a leur actuelle a
enumere tous les devices de stockages de masse USB en passant par des
fonctions telles que CreateFile et DeviceIocontrol. En revanche je
n'arrive pas a savoir de qu'elle maniere je peux retrouver la lettre
de lecteur logique associé a device physique. si quelqu'un pouvait me
donner ne serait ce qu'un debut de réponse cela me rendrait un grand
service.




Il y a entre autres GetVolumePathNamesForVolumeName()
Par ex, sur mon poste,
"\?Volume{c3438222-a8ed-11d9-93b6-806d6172696f}"
me donne "G:"


Dans quelle librairie de programmation?
Avatar
bertrand doradoux
Je viens d'essayer ta solution mais en fait je me heurte maintenant a un
autre probleme car maintenant la fonction GetVolumePathNamesForVolumeName
me renvoi zero en me disant que le chemin spécifié n'existe pas.
Le probleme c'est que je ne sais pas si je passe la bonne valeur, voici en
fait ce que je fais

DeviceIoControl(HubHandle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
&ConnectionInformation, .... // La recupere bien les infos concernant ma
clef

Ensuite j'appel

DeviceIoControl(hwnd, IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
&keyname,sizeof(keyname), &..... // et la je recupere une clef qui est
"{36FC9E60-C465-11CF-8056-444553540000}029"

je la transforme en "?Volume{36FC9E60-C465-11CF-8056-444553540000}029

et ensuite je passe cette valeur a la fonction


GetVolumePathNamesForVolumeName (...



Mais a ce moment la j'ai un code retour False

En fait je me demande j'ai un doute concernant le 2eme parametre(
IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME) passe a la fonction
DeviceIoControl, qui en fait ne me renvoi peut etre bien pas le nom de la
clef ?

Peut etre avez vous une idée pour mon probleme?


"Christian ASTOR" a écrit dans le message de
news: 43cd70c8$0$26400$
bertrand doradoux wrote:

Je vous explique mon probleme , voila j'arrive a leur actuelle a enumere
tous les devices de stockages de masse USB en passant par des fonctions
telles que CreateFile et DeviceIocontrol. En revanche je n'arrive pas a
savoir de qu'elle maniere je peux retrouver la lettre de lecteur logique
associé a device physique. si quelqu'un pouvait me donner ne serait ce
qu'un debut de réponse cela me rendrait un grand service.



Il y a entre autres GetVolumePathNamesForVolumeName()
Par ex, sur mon poste,
"\?Volume{c3438222-a8ed-11d9-93b6-806d6172696f}"
me donne "G:"


Avatar
bertrand doradoux
En fait cette fonction se trouve dans les api standards, il faut cependant
definir la constante :#define _WIN32_WINNT 0x0500


"azertyuiop" a écrit dans le message de news:

Christian ASTOR a écrit :
bertrand doradoux wrote:

Je vous explique mon probleme , voila j'arrive a leur actuelle a enumere
tous les devices de stockages de masse USB en passant par des fonctions
telles que CreateFile et DeviceIocontrol. En revanche je n'arrive pas a
savoir de qu'elle maniere je peux retrouver la lettre de lecteur logique
associé a device physique. si quelqu'un pouvait me donner ne serait ce
qu'un debut de réponse cela me rendrait un grand service.




Il y a entre autres GetVolumePathNamesForVolumeName()
Par ex, sur mon poste,
"\?Volume{c3438222-a8ed-11d9-93b6-806d6172696f}"
me donne "G:"


Dans quelle librairie de programmation?


Avatar
Christian ASTOR
bertrand doradoux a écrit :

je la transforme en "?Volume{36FC9E60-C465-11CF-8056-444553540000}029

et ensuite je passe cette valeur a la fonction

GetVolumePathNamesForVolumeName (...
Mais a ce moment la j'ai un code retour False



Je ne peux pas tester, mais si tu énumères les volumes, est-ce que tu
les retrouves ?
(BTW, un nom de volume doit normalement se terminer par "")

Ex basique =>

int main(void)
{
char sVolumeName[MAX_PATH], sVolumePathNames[MAX_PATH],
sVolumeNameBuffer[MAX_PATH];
HANDLE hVolume;
DWORD nBufferLength = MAX_PATH, nReturnLength;
BOOL bReturn;
DWORD dwSysFlags;

hVolume = FindFirstVolume (sVolumeName, MAX_PATH );

if (hVolume == INVALID_HANDLE_VALUE)
{
printf ("Error : No volumes found!n");
return (-1);
}

do
{
bReturn = GetVolumePathNamesForVolumeName(sVolumeName,
sVolumePathNames, nBufferLength, &nReturnLength);
strcpy(sVolumeNameBuffer, "");
bReturn = GetVolumeInformation(sVolumePathNames, sVolumeNameBuffer,
MAX_PATH, NULL, NULL,
&dwSysFlags, NULL, NULL);
printf ("Path : %s - Name : %s - %sn", sVolumeName,
sVolumePathNames, sVolumeNameBuffer);
} while (FindNextVolume(hVolume, sVolumeName, MAX_PATH ));

FindVolumeClose(hVolume);

return 0;
}
Avatar
Cyrille Szymanski
"Christian ASTOR" wrote in
news::

GetVolumePathNamesForVolumeName (...





Ça peut aussi renvoyer un chemin de répertoire dans le cas où le volume est
monté dans un dossier ?

--
Cyrille Szymanski