Informations partition (type, format ... ) ? [Résolu]

chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 24 déc. 2008 à 10:03 - Dernière réponse : chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 déc. 2008 à 11:36
Bonjour,

Je développe sous Windows avec VC++, et je souhaite obtenir quelques informations sur mes HDD via le C++.
J'ai déjà réussi à obtenir diverses informations telles que la taille (totale / restante / utilisée) de mon HDD, ainsi que la lettre qui lui est assignée (p.ex. : C:\ ). Mais voilà, je souhaiterais en savoir plus, et je suis donc à la recherche d'une fonction me permettant d'obtenir le format de ma partition (NTFS, FAT, ... ) et surtout, le type de partition (Active ou non).

Je sait que toutes ces informations sont disponibles dans le MBR, mais je n'ai aucune idée de la maniere à utiliser pour lire les informations situés dans ce MBR. Il est également possible d'obtenir ces infos via DISKPART, mais je prefererais eviter l'appel à des commande dos style : system("DISKPART");

Je me tourne vers vous donc, pour savoir comment, et surtout , avec quoi puis-je connaitre le type, et le format de mes differentes partitions ?

Bonne Fete de Noel à tous.

Cordialement
P. KOCH
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 29 déc. 2008 à 10:57
3
Merci
Heu bin tu m'excuseras (Ou pas), mais j'ai pas très envie d'écrire dans une MBR...

Tu peux montrer un peu de code ?

Tu as demandé les droit d'écriture dans le CreateFile ?

Tu as regardé du côté des privilèges ? Genre avec ce genre de code.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_rt15
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 24 déc. 2008 à 10:50
0
Merci
Re

Je suis tombé sur un petit bout de code sur le net, qui permet d'obtenir le format de la partition.
Il s'agit de l'API  GetVolumeInformation(...). Il semblerait que cette fonction ne connaisse que les format NTFS et FAT, mais ça me suffit (pour l'instant).

Par contre, en ce qui concerne le type de partition, c'est à dire savoir si elle est active ou non, je continu de chercher. Si vous avez une idée, ou une piste, je prend ;)

Cordialement
P. KOCH
Commenter la réponse de chtitpierre78
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 24 déc. 2008 à 13:04
0
Merci
Salut,

Il y a DeviceIoControl que tu peux utiliser pour remonter pas mal d'infos, sur la géométrie notamment. Exemple ici.

Aide sur les disques et les codes de contrôles passés à DeviceIoControl ici.

Les volumes t'intéresseront peut être aussi.

En ce qui concerne la partition active... Peut être que c'est ce qui est dans le champ BootIndicator de cette structure, c'est du moins ce que j'en déduis de wikipedia.
Commenter la réponse de cs_rt15
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 déc. 2008 à 09:27
0
Merci
Bonjour,

Merci pour toutes ces informations RT15. En ce qui concerne le dernier lien, à propos de "PARTITION_INFORMATION_MBR Structure", je n'ai malheureusement pas réussi à l'utiliser. GetLastError() me renvoi sans cesse l'erreur 5 : accés refusé. Bref, j'ai trouvé un source interressant sur CPPFR., qui me permet de lire directement le MBR. http://www.cppfrance.com/codes_image/normal/28413.aspx
Depuis ce MBR, j'ai absolument toutes les informations recherchées, dont le type de partition.

Le sujet est donc résolu. Avant de valider la reponse, je vais valider tout ca.
Merci encore RT15.

Cotrdialement.
P. KOCH
Commenter la réponse de chtitpierre78
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 déc. 2008 à 10:17
0
Merci
Ma méthode pourra sans doute aider quelqu'un, c'est pourquoi je poste ce que j'ai fait :

- CreateFile du disque physique (\\.\PhysicalDrive0) -> voir MSDN de CreateFile
- ReadFile des 512 premiers octets du Handle retourné par le CreatFile du haut.

De cette manière, je peut lire les 512 premiers octets, qui représentent le MBR.

J'en profite également pour demander si il est possible de modifier le MBR lu. Effectivement, je souhaiterais modifier un octet en particulier (celui qui determine si la partition est active ou non ). Ma methode actuelle est la suivante :

- Lecture des 512 octets du MBR dans un buffer.
- Modification de l'octet via un pointeur
- Utilisation de WriteFile pour réécrire le MBR en prenant compte la modification apportée.

Le probléme, c'est que ma fonction me renvoie Erreur 5 (accés refusé ...). Je comprend le fait que Windows refuse que je touche au MBR, mais comment puis-je faire pour forcer la modification ? Des outils comme EditHexa sont capable de modifier le MBR, comment font-ils ?

Merci d'avance
K. Pierre
Commenter la réponse de chtitpierre78
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 29 déc. 2008 à 10:30
0
Merci
Tu serais pas un peu sous Vista par hasard ?
Commenter la réponse de cs_rt15
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 déc. 2008 à 10:36
0
Merci
Oh oui, excuse moi je n'ai pas précisé mon environnement :

- Win XP Edition Familiale
- Visual C++
Commenter la réponse de chtitpierre78
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 29 déc. 2008 à 11:14
0
Merci
C'est bien possible qu'il faille respecter les contraintes suivantes, même si tu ne positionnes pas le flag.
Commenter la réponse de cs_rt15
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 déc. 2008 à 11:23
0
Merci
Encore une fois, merci RT15. Effectivement, première erreur, je n'avais pas mis les droits d'écritures dans le CreateFile . Deuxième erreur, entre chaque opération (lecture / écriture / relecture) il est nescessaire de repasser par un CreateFile, pour bien repartir du debut.

Voila, le probléme est reglé, merci 1000 fois RT15.
Bonne fetes de fin d'année.

Cordialement
P. KOCH
Commenter la réponse de chtitpierre78
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 29 déc. 2008 à 11:28
0
Merci
Pour revenir au début, on utilise habituellement SetFilePointer.
Commenter la réponse de cs_rt15
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 déc. 2008 à 11:36
0
Merci
Parfait, merci encore :)
Commenter la réponse de chtitpierre78

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.