Récupérer le type de partition

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 8 août 2006 à 15:48
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 9 août 2006 à 18:48
Bonjour à tous,

Voila je cherche comment je pourrai récupérer le type de partition d'un volume (Principale, etendue ,...) . Suis-je sur la bonne voi avec ces fonctions ? http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemain4/html/cxrefpd_getpartitioninfo.asp .

Je n'ai trouver que la source de vecchio qui tratai du sujet, mais c'est en ASM :s .

Merci d'avance.

14 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
8 août 2006 à 15:56
Ça a l'air d'être une fonction pour Windows CE. Je crois que tu devrais jeter un coup d'oeil du coté de DeviceIoControl

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation

<fo></fo>
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
8 août 2006 à 16:10
Plus précisément, j'ai trouvé ça:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/ioctl_disk_get_partition_info_ex.asp

Il y a aussi :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/ioctl_disk_get_partition_info.asp
qui retrouve bien le type de partition mais elle est obsolete alors je sais pas ce que ça donnera. Sinon, la source de vecchio est parfaitement compréhensible. Il n'y a que quelque section en asm. D'ailleur, lui aussi utilise IOCTL_DISK_GET_PARTITION_INFO.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 août 2006 à 16:15
Merci , he bien c'est que j'ai du mal regardé , je vai voir ça de plus près.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 août 2006 à 16:20
Ben en fait non , je comprend pas vraiment la source de vecchio. bon ben je vai faire sans et esseye de trouver comment fonctionne IOCTL_DISK_GET_PARTITION_INFO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2006 à 23:09
Tu rigoles, elle est pas en asm... Si tu veux une explication sur un endroit précis, t'a qu'a demander et je te fais un devis ;)
Un site qui m'a bien servi dans l'élaboration de la source en question:
http://www.bellamyjc.org/, et tu va dans multiboot

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
8 août 2006 à 23:16
Bah. C'est peut-être juste la première partie du code avec les fonctions de BruNews qui l'a découragé :) Si c'est le cas deck_bsd, je te rassure, le reste du code n'a vraiment rien de très compliqué. Fouille bien, c'est très interessent comme code.

Cependant vecchio, tu utilise bien IOCTL_DISK_GET_PARTITION_INFO mais dans la documentation de MSDN, il est clairement indiqué qu'elle est obsolete. Y'a pas de danger à l'utiliser? Par danger je veux dire, renvoie de fausses données par exemple.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
< body>
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2006 à 23:33
Je l'utilise... oui et non!
Voici les seules lignes ou je l'utilise:
PARTITION_INFORMATION PartitionInformation;
DeviceIoControl(hDevice, IOCTL_DISK_GET_PARTITION_INFO, 0, 0,
  &PartitionInformation, sizeof PartitionInformation, &d, 0);

En gros cette instruction ne sert à rien, ca doit être un vieux reste que j'ai oublié d'enlever.
Donc finalement on peut dire que je l'utilise pas ;)

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2006 à 23:40
Au fait deck_bsd, on pourrait savoir ce que tu nous prépares? (tu poses bcp de questions sur ce sujet en ce moment)

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
9 août 2006 à 10:09
Lol oui vecchio , j'ai un peut mieu regardé ta source, il est vrai qu'elle n'est pas en asm. Cependant elle reste très flou pour moi. J'ai +- compris comment utiliser DeviceIoControl en lisant la msdn , cependant je ne voi pas comment elle va m'aider à récupérer le type de la partition (primaire/logique) Surtout que tu vien de dire que dans ton code, ces lignes ne servent a rien mdr . Dans ta source vecchio , je voi que tu fait référence à des valeur, mais pourquoi celle là ? deplus tu utilise bcp de chose que je comprend pas, par exemple Offset, ... Enfin , c'est encore très très flou mais j'espèr y arriver un jour. Je vai de ce pas lire ce qu'il ai écrit sur le site de bellamy jc :D
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
9 août 2006 à 12:12
Voila j'ai lu la theorie sur bellamyjc, très intéressent , cependant , cela ne fait que m'embrouiller encore plus. Si je comprend pour aller voir le type de partition je doit aller lire a l'adresse 04 et a l'offset 1C2 , ... ouai sauve qu'il n'explique pas xe qu'est un offset et il ne dit pas non plus si ce tableau est un exemple pour les partitions qu'il à crée (ce que je pense) . Surtout qu'il y à 4 offset ( qui est le "max" de partiton primaire que l'on peut créer si j'ai bien compris).
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 août 2006 à 12:41
Offset ca veut dire position en gros.
Dans ma source j'ai cette structure:
typedef struct tagTABLE_ENTRY
{
  BYTE state;
  BYTE headBegin;
  WORD sectorCylinderBegin;
  BYTE partitionType;
  BYTE headEnd;
  WORD sectorCylinderEnd;
  DWORD distBetweenSectAndBootSect;
  DWORD partitionSize; // En secteurs
} TABLE_ENTRY, *LPTABLE_ENTRY;

state est à l'offset 0, headBegin à l'offset 1, partitionType est à 4

partitionType est bien à l'adresse 4, mais le tout est de trouver l'adresse de base, qui est la table de partition. Donc en gros tu commences au MBR, puis tu parcours tout le disque.
Il y a aussi un moyen plus simple, mais ca ne marchera qu'avec les partitions qui on une lettre sous Windows.
Par exemple pour C:\\, tu l'ouvres avec CreateFile, comme ca tu sera directement sur la table de partition (enfin je crois, à vérifier)
Mais avec mon code tout est déja fait, je te conseille d'essayer de le comprendre

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
9 août 2006 à 13:55
 je vei esseye de la comprendre et si j'ai des points d'ombre , tu me fait un devis :D mdr
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
9 août 2006 à 17:53
ouiiiiii ok bon en faite ta structure c'est la table d'entrée on est bien daccord. Donc tu fait un handle du volume avec CreateFile et ensuite de la tu fait un ReadFile des 512 1er octet dans un buffer et ensuite ben tu affecte directement la mémoire du buffer dans ta structure ... ouaiiiii c'est claire maintenant, seulement , comme j'ai mis dans le doc que je t'ai envoyé , c'est le traitement des données que je comprend pas :(
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
9 août 2006 à 18:48
et la je vien de comprendre tes valeur 0,0x5,0xF c'est les code hexa du type de partition comme indiqué sur le site, oui oui , voila cela ce met en place doucement :D
0
Rejoignez-nous