CLASSE SUR LES DISQUES/PARTITIONS ==> OBTENTIONS D'INFOS (CLUSTERS, TAILLE, NOM,

Profil bloqué - 19 nov. 2006 à 23:06
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 26 avril 2007 à 18:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40383-classe-sur-les-disques-partitions-obtentions-d-infos-clusters-taille-nom-secteurs

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
26 avril 2007 à 18:00
(Note : cette source est entièrement contenue dans cette nouvelle source : http://www.vbfrance.com/codes/FILESYSTEMLIBRARY-TOUT-FSO-SUR-FICHIERS-DOSSIERS-DISQUES_42404.aspx

De plus, de nombreuses fonctions et d'autres classes (objets) sont présentes.)

@+
Profil bloqué
28 nov. 2006 à 21:13
Salut Laverdanny
Pour la deuxième question ce n'est pas de la manipulation de fichier ISO qu'il faut faire mais rajouter à ce même fichier ISO les informations de boot
Si je comprends bien tu aurais une image non bootable d'un CD et tu voudrais directement agir sur le fichier ISO pour permettre le boot si tu graves l'image ISO sur cd
Il faut rajouter sur l'ISO un descripteur de boot : un CD généralement contient 2 ou 3 descripteurs : un descripteur ISO et-ou un descripteur Microsoft-Joliet et un descripteur de fin.Un CD bootable contient en plus le descripteur de boot
Maintenant est-ce faisable ? Je l'ignore
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
28 nov. 2006 à 13:49
Salut, pour la première partie de la question, si jamais c'est possible de faire ce que tu demandes, çà se trouve par ici je pense :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/disk_management_control_codes.asp
et peut être plus particulièrement ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/ioctl_disk_set_partition_info_ex.asp

Pour la seconde partie de ta question, aucune idée, mais Galain te répondra certainement ;)

@+
laverdanny Messages postés 33 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 3 août 2007
28 nov. 2006 à 13:04
bonjour uax spécialistes file-system... ;-)

y a-t-il une manière accessible pour modifier la taille (voire le nombre) de partitions (notamment NTFS) ?

plus particulièrement pour Galain : y a-t-il manière de manipuler un fichier .ISO pour le faire devenir une image bootable ?

Merci d'avance
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
26 nov. 2006 à 17:17
Ok, çà roule ^^

Merci encore pour ton aide, @+
Profil bloqué
26 nov. 2006 à 17:07
tout est Ok
Maintenant c'est 10/10
A+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
26 nov. 2006 à 16:26
Re, çà devrait être bon comme çà (j'ai ajouté la différentiation entre Logique et Physique pour les secteurs).

Merci encore, @+
Profil bloqué
26 nov. 2006 à 14:16
Salut Violent_Ken
"Le problème vient de la traduction des types de variables C en types de variables VB" ==> Hum, je tenterais de repasser en LARGE_INTEGER.

Ne cherches plus : j'ai trouvé
Peux-tu m'envoyer un message privé à Galain avec ton adresse email et je t'envoie la source avec les infos correctes
Lorsque tu cherches à avoir les valeur .StartingOffset et .HiddenSectors tu n'as pas pris la bonne structure dans le With
A*
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
26 nov. 2006 à 13:58
Re,

oui voilà, je cherchais justement l'organisation (d'où les chiffres 32,35...) du MBR.
Ceci http://www.x-ways.net/winhex/kb/ sera utile.



"Par contre la structure maitre possède un paramètre lui disant d'utiliser soit le LONG soit les 4 BYTE"
> Ah d'accord, je vois l'intérêt de la structure avec Union.


"Le problème vient de la traduction des types de variables C en types de variables VB" ==> Hum, je tenterais de repasser en LARGE_INTEGER.

Merci, @+
Profil bloqué
26 nov. 2006 à 13:45
Salut Violent_Ken
Dans le cas du post précédent les formules comme tu dit découlent directement de l'organisation des informations contenues dans le secteur de boot d'une partition ou dans le Master Boot Record (MBR ou Secteur de partition)
Le tableau Readoctet(0 to 511) contient au format Byte les 512 octets du secteur 0 de la partition ou du MBR.
Dans l'exemple que tu me signales le nombre total de secteurs en Fat12 est stocké dans les octets 19 et 20 du secteur et en FAT16 ou 32 dans les octets 32,33,34 et 35 de ce même secteur.Etant donné que les poids faibles sont au début cela explique que le second soit multiplié par 256,le troisième par 65536,etc...
La source n'est pas difficile à comprendre mais il faut connaître l'organisation des données dans les différents secteurs (secteur de partition,secteur de boot de partition,secteur de la FAt,etc....)
tu me parlais de winhex dans un précédent post : leur site propose mais en anglais un tuto sur l'organisation des partitions FAT.
Bases-toi aussi sur la feuille Bootfrm du projet qui te donnes la structure de ce secteur de boot en Fat12,16 et 32 et en NTFS

De plus tu me disais:
Et dans la structure C de PARTITION_INFORMATION_EX, il y a çà:
union {
PARTITION_INFORMATION_MBR Mbr;
PARTITION_INFORMATION_GPT Gpt;
};
qui me semble difficile à traduire en VB...

une union en C++ est la réunion de 2 structures différentes dans le même espace mémoire et dont la taille est celle de la plus grande structure
Exemple basique
union {
valeur4 as long;
octet(4) as byte;
];
Dans le premier cas le paramètre est un LONG sur 4 octets
Dans le second cas les paramètres sont 4 valeurs au format BYTE
Par contre la structure maitre possède un paramètre lui disant d'utiliser soit le LONG soit les 4 BYTE

Les informations de partitions sont au format MBR (Master Boot Record) ou GPT (GUID Partition Table).
Le code IOCTL_DISK_GET_PARTITION_INFO-EX gére les 2 types de partitions alors que celui sans EX ne gère que les partions MBR
Dans ton code j'ai réussi à avoir l'information correcte pour les secteurs cachés mais pas pour l'offset de départ.Le problème vient de la traduction des types de variables C en types de variables VB.Le type CURRENCY est à éviter dans ce cas-là car il est directement manipulé par les Apis et est source d'erreur.
Voila où j'en suis mais on avance vers la solution

A+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
26 nov. 2006 à 11:59
Salut, tu as codé des trucs dans ce genre :

If fat% = 12 Then
TotalSectors = CCur(readoctet(19)) + CCur(CCur(readoctet(20)) * 256)
Else
TotalSectors = CCur(readoctet(32)) + CCur(CCur(readoctet(33)) * 256) + CCur(CCur(readoctet(34)) * 65536) + CCur(CCur(readoctet(35)) * 16777216)
End If

Comment as tu pu déterminer ces formules ? (d'où proviennent les numéros 32,35,19...)

Merci, @+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
24 nov. 2006 à 18:53
Salut, je vais regarder ta source de près^^
@+
Profil bloqué
24 nov. 2006 à 07:15
Salut Violent_Ken
Désolé de ne pas t'avoir répondu hier mais je suis rentré très tard
"N'est-il pas plus simple de récupérer les infos de partitions en lisant directement le secteur de partitions avec Readfile" ==> c'est à dire ?

La feuille Introfrm du projet "Acces Direct Disque" contient une procédure Partable qui lit les infos de partition en utilisant Readfile pour le premier secteur d'un disque dur.Elle ne traite pas toutes les infos disponibles car je ne les utilise pas toutes mais avec la documentation de la structure d'une table de partition cela ne devrait poser aucun problème.

A+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
23 nov. 2006 à 11:51
Salut, concernant la doc MSDN, je n'ai pas réussi non plus à utilisr ce ControlCode.

Et dans la structure C de PARTITION_INFORMATION_EX, il y a çà:
union {
PARTITION_INFORMATION_MBR Mbr;
PARTITION_INFORMATION_GPT Gpt;
};
qui me semble difficile à traduire en VB...
Et j'ai trouvé aucun exemple sur le Web de l'utilisation de ce controlcode en VB.


"N'est-il pas plus simple de récupérer les infos de partitions en lisant directement le secteur de partitions avec Readfile" ==> c'est à dire ?

@+
Profil bloqué
22 nov. 2006 à 23:15
Salut Violent_Ken
J'ai tout tenté pour faire fonctionner IOCTL_DISK_GET_PARTITION_INFO_EX mais c'est un échec pour moi pour l'instant .N'est-il pas plus simple de récupérer les infos de partitions en lisant directement le secteur de partitions avec Readfile? Qu'en penses-tu ?
il faut dire que la doc MSDN est un peu floue sur ce domaine précis et pas évidente à mettre en oeuvre

A+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
22 nov. 2006 à 13:35
Salut, j'avais pas eu le temps de vraiment re-regarder cette classe (posté une autre source hier), mais c'est vrai que le ControlCode est "obsolète" selon MSDN.

Pour la version -EX, j'avais essayé mais je n'étais pas arrivé à la faire marcher, donc j'avais laissé comme çà...

Donc effectivement, çà se peut bien que le problème vienne de là. Je vais voir çà ce soir.
Merci, @+
Profil bloqué
22 nov. 2006 à 07:44
Salut Violent_Ken
IOCTL_DISK_GET_PARTITION_INFO serait maintenant un code obsolète ( au conditionnel car je n'ai point la confirmation) et il existerait un code IOCTL_DISK_GET_PARTITION_INFO_EX mis à jour
Ce doit être la source des informations erronées pour "offset de départ" et "secteurs cachés" de la classe
Cela n'a rien à voir avec les LARGE_INTEGER et Currency comme dit dans mes précédents posts
Profil bloqué
19 nov. 2006 à 23:55
Tu déclares des valeurs en temps que Currency dans certaines structures. Tu devrais les déclarer en tant que LARGE_INTEGER ( 2 LONG 32 bits signés) et convertir ces valeurs en Currency
tu as le même problème que moi dans Acces Direct Disque mais à l'envers
visual Basic 6.0 n'accepte pas les valeurs 64 bits non signées ni signées : je pense que cela est lasource de nos problèmes
Je vais regarder

A+
Profil bloqué
19 nov. 2006 à 23:42
Les infos offset de départ et secteurs cachés pour les partitions sont erronnées.Je soupçonne les LARGE_INTEGER de te jouer des tours
Je vais chercher la soluce
A +
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 23:41
Je regarderais demain ce qu'il en est.
Merci de m'avoir signalé cela.

@+ et merci pour la note ^^
Profil bloqué
19 nov. 2006 à 23:06
Salut Violent_Ken

comme je t'ai déjà donné mon avis sur ce code dans les commentaires de "Accès Direct Disque" je vais te noter
Petit bémol = offset de départ pour un lecteur de disquette est négatif : mais tu vas trouver c'est sûr donc 9/10
Bravo : code très clair et bien structuré
Rejoignez-nous