Récupérer le type de partition

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
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

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Ç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>
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Merci , he bien c'est que j'ai du mal regardé , je vai voir ça de plus près.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
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>
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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).
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
 je vei esseye de la comprendre et si j'ai des points d'ombre , tu me fait un devis :D mdr
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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 :(
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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