IOCTL_DISK_GET_LENGTH_INFO

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 17 déc. 2004 à 21:10
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 17 déc. 2004 à 21:35
Bonsoir

J'essaie d'écrire une fonction pour connaitre la taille d'un disque physique, mais j'ai problème a l'appel de DeviceIoControl(). Voila ma fonction:

void GetDiskSize(HANDLE hDevice, LARGE_INTEGER* i)
{
DWORD d;
BOOL bRet;

bRet = DeviceIoControl(hDevice, IOCTL_DISK_GET_LENGTH_INFO, 0, 0, i, sizeof *i, &d, 0);
}


L'appel est le suivant:

<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>
LARGE_INTEGER i;
HANDLE hDevice = CreateFile("\\\\.\\PHYSICALDRIVE0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE,
0, OPEN_EXISTING, 0, NULL);
GetDiskSize(hDevice, &i);
<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>

Après l'appel de DeviceIoControl, GetLastError de donne un "Accès refusé"
Cela vient-il de la manière dont hDevice est créé?

Merci pour votre aide

4 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 déc. 2004 à 21:27
PHYSICALDRIVE0 est le lecteur de disquette si je ne dis pas de betise.

Puis il y a trop de slash dans ton affaire.
\\.\c: suffirra emplement pour acceder a ton disque dur C:

Essaye avec ca et dis moi si ca marche.

Shell
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 déc. 2004 à 21:29
Non en fait il fallait créer hDevice avec GENERIC_READ.
Mais pour IOCTL_DISK_GET_DRIVE_LAYOUT_EX par exemple, pas besoin de GENERIC_READ, je comprends pas pourquoi (c'est pas dit dans MSDN...)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 déc. 2004 à 21:32
Teste avec "\\.\D:" par exemple et mets sizeof(LARGE_INTEGER).
Les trucs 'sizeof *i' ne m'ont jamais inspire confiance.
J'ai deja mis un exemple ici:
http://www.cppfrance.com/code.aspx?id=11329

ciao...
BruNews, MVP VC++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 déc. 2004 à 21:35
Oki.
Clair que c'est bizarre.
Peut etre que GENERIC_READ évite de passer par un mode protéger a l'ouverture du fichier...

Shell
0
Rejoignez-nous