Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

Catégorie :Fichier / Disque Classé sous : disque, partition, deviceiocontrol, logique, physique Niveau : Initié Date de création : 19/11/2006 Date de mise à jour : 15/12/2006 21:48:39 Vu / téléchargé: 5 041 / 879

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Ce code est une classe qui permet de :
-lister les lecteurs (partitions)
-lister les disques physiques
-obtenir des infos sur les disques physiques
-obtenir des infos sur les partitions

Utilisation d'API uniquement (pas de registre ni de WMI).
 

Source

Conclusion

N'hésitez pas à commenter et à noter !

@+
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

26 novembre 2006 16:25:39 :
Corrigé le bug vu par Galain, correction du nombre de secteurs et ajout de 2 infos (PartitionLenght, Secteurs logiques/physiques)
15 décembre 2006 21:48:39 :
M'étais planté dans le passage de flags... Voir http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/creating_and_opening_files.asp

Commentaires et avis

signaler à un administrateur
Commentaire de Galain le 19/11/2006 23:06:19

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é  

signaler à un administrateur
Commentaire de violent_ken le 19/11/2006 23:41:51

Je regarderais demain ce qu'il en est.
Merci de m'avoir signalé cela.

@+ et merci pour la note ^^

signaler à un administrateur
Commentaire de Galain le 19/11/2006 23:42:06

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 +

signaler à un administrateur
Commentaire de Galain le 19/11/2006 23:55:52

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+

signaler à un administrateur
Commentaire de Galain le 22/11/2006 07:44:17

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

signaler à un administrateur
Commentaire de violent_ken le 22/11/2006 13:35:38

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, @+

signaler à un administrateur
Commentaire de Galain le 22/11/2006 23:15:55

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+

signaler à un administrateur
Commentaire de violent_ken le 23/11/2006 11:51:22

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 ?

@+

signaler à un administrateur
Commentaire de Galain le 24/11/2006 07:15:19

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+

signaler à un administrateur
Commentaire de violent_ken le 24/11/2006 18:53:23

Salut, je vais regarder ta source de près^^
@+

signaler à un administrateur
Commentaire de violent_ken le 26/11/2006 11:59:44

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, @+

signaler à un administrateur
Commentaire de Galain le 26/11/2006 13:45:03

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+

signaler à un administrateur
Commentaire de violent_ken le 26/11/2006 13:58:16

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, @+

signaler à un administrateur
Commentaire de Galain le 26/11/2006 14:16:42

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*

signaler à un administrateur
Commentaire de violent_ken le 26/11/2006 16:26:36

Re, çà devrait être bon comme çà (j'ai ajouté la différentiation entre Logique et Physique pour les secteurs).

Merci encore, @+

signaler à un administrateur
Commentaire de Galain le 26/11/2006 17:07:57

tout est Ok
Maintenant c'est 10/10
A+

signaler à un administrateur
Commentaire de violent_ken le 26/11/2006 17:17:01

Ok, çà roule ^^

Merci encore pour ton aide, @+

signaler à un administrateur
Commentaire de laverdanny le 28/11/2006 13:04:43

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

signaler à un administrateur
Commentaire de violent_ken le 28/11/2006 13:49:30

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 ;)

@+

signaler à un administrateur
Commentaire de Galain le 28/11/2006 21:13:22

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

signaler à un administrateur
Commentaire de violent_ken le 26/04/2007 18:00:42

(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.)

@+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Partitions Disque Important !!! [ par CHRI ] Bonjour,J'ai installé un disque de 10 Go sur une machine (Pentium 2).J'ai crée la partition primaire (C:) sur laquelle j'ai installé Win98.Ensuite lor DeviceIOControl et disque [ par Flachy Joe ] Comment utiliser l'API&nbsp; DeviceIOControl pour lire des donn&#233;es sur un lecteur CD, je sais que c'est possible, mais dans les exemples que j'ai Parcours des fichiers d'un disque [ par lostrailler ] Bonjour à tous.Voilà, j'ai besoin de parcourir une partition d'un disque en entier. Il faut que je récupère sur tous les fichiers de la partition des obtenir le nimiro physique d'un disque dure en vb.net 2005 [ par maanaloun ] bonjour, j'ai fait un petit programe pour aider les enfans aveugles à metriser le clavier, mais je vais bien le protaiger. je cherche un example de c Nombre total de secteurs d'un disque physique [ par windob ] Bonjour,Je suis actuellement sur un projet pour lequel j'ai besoin de connaitre le nombre total de secteur du disque dur (physique et non logique).J'a espace disque [ par swan94 ] Salut à tous,je cherche à savoir comment trouver en VB2005 l'espace total et l'espace disponible sur le disque dur d'un autre poste présent sur le rés Partition batterie [ par gribouillex ] Bonjour,Je suis à la recherche d'un code qui permet de lire un fichier MIDI quelconque, d'afficher la partition batterie et la faire dérouler pendant Récuperer taille d'un disque. [ par DeWaRs ] Bonjour a tous. Je souhaite récuperer la taille de mon disque dur en VB 2005. Pour cela j'utilise WMI.     Public Function get_hard_disk() As String   Problème de lenteur, accès distant à base Access [ par pjouy ] Bonjour,J'ai fait un programme de base de données. Le programme est lancé depuis le disque dur de l'ordinateur client, et la base de données (Access) [BAR]hébergement gratuit sans pub 1.5GB d'espace disque [ par gillardg ] Bonjour,si vous cherchez un hébergement gratuit PHP / MySQL<span style="TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-CO


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.