begin process at 2012 02 16 17:26:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > ACCÈS DIRECT DISQUES ET PARTITIONS VB NET

ACCÈS DIRECT DISQUES ET PARTITIONS VB NET


 Information sur la source

Note :
9,67 / 10 - par 6 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Source .NET ( DotNet ) Classé sous :disque, secteur, cluster, partition, système Niveau :Initié Date de création :10/03/2008 Date de mise à jour :05/02/2012 18:15:45 Vu / téléchargé :14 811 / 1 136

Auteur : Galain

Ecrire un message privé
Commentaire sur cette source (73)
Ajouter un commentaire et/ou une note

 Description

Cette source permet l'exploration des disques et partitions NTFS ,FAT de votre PC. C'est la version Net de ma source "Accès Disques et Partitions VB 6.0" .
C'est ma première source en VB Net et toute critique constructive est la bienvenue.
J'utilise VB 2008 NET Express et il est possible que cette source ne puisse pas fonctionner sous VB 2005 NET ( je ne peux pas tester car je n'ai plus VB 2005 NET Express)



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

15 mars 2008 01:38:35 :
La feuille Recherche de chaine ASCII ou héxadécimale est terminée.Les feuilles Recherche.vb et Analyse.vb sont communes aux systèmes de fichiers NTFS et FAT.Le prochain morceau sera le système FAT puis les CDROMs puis les disques physiques.Bonne prog à tous et A+
15 mars 2008 17:39:20 :
quelques petites modifications mineures dans la feuille Recherche.vb avant d'attaquer la suite. Bonne prog à tous
22 mars 2008 18:31:42 :
Le système FAT est maintenant pris en charge par le projet pour les 3 types de FAT (12,16 e 32 bits).Je n'ai pas pu tester dans l'analyse de la partition si l'affichage des clusters est correct pour un fichier fragmenté lorsque l'on clique dans la liste des fichiers un fichier fragmenté ( dans ce cas la lite des clusters doit contenir au moins 2 lignes ou plus). Prochain morceau : les CDROMS etDVDROMS Bonne prog à tous et joyeuses Pâques
22 mars 2008 18:35:54 :
Le système de fichiers FAT est maintenant pris en charge par le projet ( FAT 12,16 et 32 bits).La liste des clusters dans la feuille Analyse en FAT n'a pas été testée avec des fichiers fragmentés car je n'ai point de fichiers fragmentés sur ma partition Fat de test. Bonne prog à tous et Joyeuses Pâques
03 avril 2008 22:23:18 :
Les CDROM et DVDROM ont leur formulaire principal ( les CD audio ne sont point encore traités).Trois autres feuilles viendront compléter ce formulaire : l'exploration des fichiers,le détail des descripteurs ainsi que l'analyse du secteur de Boot d'un CD Bootable. Bonne prog à tous
05 avril 2008 22:28:18 :
Ca y est : les cdroms de données, les dvdroms de données et les DVD vidéo sont traités. Seule ombre au tableau en mode ISO 9660 les icônes ne sont pas disponibles.Reste les CD Audio puis les lecteurs physiques. Si quelqu'un sait comment convertir un nom de fichier ISO 9660 en nom de fichier Microsoft Joliet je suis preneur. Bonne prog à tous et A+
06 avril 2008 21:14:55 :
Un gros bug a été supprimé dans la feuille Explorecdfsfrm ( explorateur de fichiers pour les CD et DVD). Cela concernait le cas où le contenu d'un répertoire était supérieur en taille à la taille d'un secteur .Le projet identique en version VB 6.0 a aussi été corrigé pour ce même bug. Bonne prog à tous
15 avril 2008 00:03:12 :
Les CD audio sont maintenant gérés par le projet. Quelques erreurs ont été corrigées au niveau des CD et DVD de données et DVD vidéos.Tous les supports optiques (CD et DVD) sont gérés sur la même feuille Cdromfrm.
21 avril 2008 01:00:48 :
Les lecteurs physiques sont maintenant gérés par le projet. Nous voici à la fin de la transcription en VB net du projet d'origine qui était en VB 6.0. Bonne prog à tous et A+
22 avril 2008 23:28:22 :
Les corrections nécessaires pour la gestion de l'attribut ATTRIBUT_LIST non résident ont été faites . Le projet est maintenant fonctionnel. Bonne prog à tous
04 mai 2008 01:25:26 :
Dans certains cas la liste des clusters libres et la cartographie du lecteur ne s'affichait pas dans la feuille Analyse du projet. Cela a été corrigé. Le défragmenteur est en chantier dans la feuille Defrag non encore terminée Bonne prog à tous et A+
05 mai 2008 06:52:21 :
Le défragmenteur a été supprimé du projet : je n'y arrive pas.En outre je me suis aperçu que les versions VB Net et VB 6.0 ne donnaient pas les mêmes résultats pour la liste des clusters libres en NTFS.La version VB NET a été corrigée : on utilise le fichier $Bitmap ( enregistrement NTFS n° 6) au lieu d'un DeviceIoControl avec le code correspondant. On fera de même pour la version VB 6.0
11 mai 2008 18:17:21 :
Quelques modifications mineures dans la feuille Analysefrm.frm qui montre la cartographie d'une partition
12 mai 2008 16:04:30 :
Quelques modifications mineures surtout dans la feuille Analysefrm qui affiche la cartographie de la partition ainsi que les clusters occupés par les fichiers. Les versions VB 6.0 et VB net du projet offrent maintenant exactement les mêmes fonctions et possibilités
28 mai 2008 00:17:30 :
Un bug a été découvert dans la Sub Filllistfichligne dans le module Module1.vb. Celui concernait l'attribut ATTRIBUT_LIST ($20) en NTFS si cet attribut n'était point résident. La taille réelle de cet attribut était fausse
21 juin 2008 01:44:36 :
Mise à jour pour fonctionner sous Windows Vista : correction de 2 bugs principalement au niveau de l'exploration des index en NTFS
28 juin 2008 15:21:36 :
J'ai enfin réussi à le faire tourner sous Windows Vista avec VB Net 2008. J'ai utilisé le SPTI pour lire les secteurs des Cdroms et Dvdroms.
29 juin 2008 11:33:50 :
La détection des supports DVD ou CD a été amélioré avec une fonction IsDVD qui utilise le SPTI
22 juillet 2008 23:55:36 :
correction de quelques petites erreurs surtout au niveau de l'affichage des secteurs en Héxa-Ascii bonne prog à tous
13 septembre 2008 23:46:44 :
Salut à tous Quelques petites modifications mineures ainsi que 3 nouvelles feuilles : une pour la liste de tous les enregistrements NTFS d'une partition , une pour l'analyse d'une partition avec la cartographie générale et une pour la cartographie des clusters d'une partition.Le projet NET est terminé pour l'instant et il reste à faire de même pour le projet identique mais en VB 6.0 bonne prog à tous et vive Codes-sources
18 septembre 2008 01:05:08 :
La purge des clusters dans la feuille Analysefrm ne fonctionnait point (l'écriture avec Writefile des secteurs disques indiquait une erreur InvalidOverlappedToPinvoke.Je n'ai rien compris à la cause de cette erreur et MSDN en anglais ou en français ne m'apporte pas clairement la solution.
28 septembre 2008 21:19:36 :
La purge des clusters libre d'une partition a été réimplantée dans le projet mais l'écriture des secteurs disque ne se fait pas dans le module Module1.vb dans la Sub DirectWriteBytes().une gestion d'erreur a été implantée pour ne pas bloquer le projet.Toute aide est bienvenue pour solutionner le problème surtout que cette Sub fonctionne nickel dans le projet similaire codé en VB 6.0 Merci à tous d'avance et surtout à celui qui réussira à solutionner le problème a+ et vive codes-Sources
06 janvier 2009 12:13:20 :
Meilleurs v½ux à tous pour commencer. J'ai rajouter dans cette source dans la feuille d'introduction l'association entre les lecteurs logiques et les disques physiques.Je cherche toujours le moyen d'écrire un secteur disque en VB net sous Vista : faut-il passer par le codage d'un driver disque ? Bonne prog à tous
06 janvier 2009 17:33:36 :
correction d'un problème dans la feuille Analyse.frm avec les listview virtuelles
02 avril 2009 15:15:13 :
Toute la partie gestion de CDROM et DVDROM a été supprimée vu la diversité des différents standards en la matière
01 juin 2009 00:51:21 :
Mise en place de la défragmentation d'une partition dans la feuille Analyse.vb. ainsi les 2 sources Acces Direct Disque VB 6.0 et VB Net ont les mêmes possibilités
01 juin 2009 01:48:43 :
Correction d'une erreur dans la feuille Analyse.vb pour la défragmentation
01 juin 2009 01:51:50 :
J'ai oublié de supprimer une Dll (lamegrid.dll) qui ne sert à rien dans ce projet)
14 juin 2009 11:40:13 :
Optimisation de la défragmentation : on ne fait qu'une seule boucle de défragmentation. Si un fichier n'est pas fragmenté on ne le déplace uniquement que si il y a de la place vers le début de la partition ( on ne le déplace pas en arrière). De plus on cherche le bloc destination du fichier le plus adéquat possible en taille.
21 juin 2009 15:54:19 :
Optimisation en rapidité de la routine de défragmentation dans la feuille Analyse.vb
28 juin 2009 03:01:11 :
correction d'un bug au niveau de la feuille analyse.vb pour la défragmentation : La fonction MoveFileExtent de Deviceiocontrol pour le déplacement des clusters ne tient pas compte du décalage en FAT entre les clusters logiques et physiques.Un second bug a été corrigé au niveau de la comparaison des 2 FAT dans la feuille Fatfrm.vb
01 juillet 2009 00:18:24 :
correction d'un bug dans la routine de défragmentation dans la feuille Analyse.vb ( cela ne concernait uniquement les volumes FAT)
06 juillet 2009 16:46:40 :
Une erreur a été corrigée dans la feuille Analyse.vb lors d'un clic dans la Picturebox de la cartographie des clusters
03 septembre 2009 22:48:06 :
suppression de module4.vb qui servait pour les CD audio
27 septembre 2009 17:19:59 :
correction de 3 erreurs dans le projet 1) dans analyse.vb en FAT un fichier vide avec comme premier cluster 0 bloquait l'affichage de la liste des clusters 2) En NTFS dans Mapcluster.vb la PictureBox Pictpartition ne reflétait pas la cartographie exacte des clusters de toute la partition 3) En FAT dans Mapcluster.vb La Picturebox Pictpartition et la grille des clusters ne correspondait pas car le premier répertoire de la liste cachée des répertoires n'était pas traité dans l'utilisation des clusters du disque tout ceci a été corrigé bonne prog à tous
27 septembre 2009 22:28:16 :
Correction de bugs mineurs dans le projet
31 octobre 2009 15:31:47 :
Sous Vista et Seven l'UAC doit être désactivé afin que la source fonctionne. Si l'UAC est opérationnel le programme émet un message invitant à le désactiver sans bloquer le programme.Ensuite il faut fermer la source, déactiver l'UAC pour réouvrir la source pour que celle-ci soit opérationnelle bonne prog à tous
01 novembre 2009 22:14:01 :
une seconde solution pour ne pas être enquiquiné par l'UAC : démarrez VB Net en tant qu'administrateur puis lancez DirectRWNet Merci à Willi pour l'astuce : cela évite de toucher les paramètres de l'UAC
03 novembre 2009 23:46:59 :
Tous les $ des chaines de caractères ont été supprimés (vieux restes de la programmation en QBasic et moyen mnémotechnique pour me rappeler que la variable était de type String)
11 novembre 2009 16:05:07 :
Quelques précisions sur la compression NTFS et les clusters virtuels sont données via la feuille Nonresident de ce projet.Ce sujet n'était pas clair pour moi et j'ai cherché des infos plus claires
11 novembre 2009 22:21:17 :
Lors des affichages des valeurs héxa et décimales dans la listview lorsque l'on clique dans la zone héxa d'un secteur une erreur s'est glissée. une valeur sur 4 octets > 7FFFFFFF est > à 2 147 483 647 et non 214 783 647. Une erreur de frappe a fait que j'ai oublié un chiffre.
13 novembre 2009 18:15:19 :
Un bug a été corrigé dans l'affichage du détail des clusters pour la runlist des attributs non résidents ( Sub Affichage dans la feuille Nonresident.vb)
22 novembre 2009 17:14:21 :
Toutes les fenêtres de l'application ont été rendues "non moveable".
23 novembre 2009 23:04:05 :
Un bug a été découvert dans la feuille Detailfrm pour l'attribut ATTRIBUT_LIST.Merci a Willi pour m'être repenché sur cet attribut lors d'une question le concernant. A+
02 décembre 2009 23:44:14 :
L'ancien module1 a été divisé en 3 modules : 1 pour les opérations disques générales, 1 pour le système FAT et le dernier pour le système NTFS. Ainsi cela fait moins fouilli. Quelques petites optimisations dans certaines routines
07 décembre 2009 06:50:26 :
Une nouvelle feuille a vu le jour : elle détaille le contenu d'un bloc de clusters
07 décembre 2009 23:38:15 :
Améliorations et optimisation dans la feuille Detailcluster.vb
09 décembre 2009 06:40:27 :
Optimisation des routines d'affichage des listviews de la feuille Detailcluster.vb
12 décembre 2009 22:57:36 :
Un peu de couleur dans les grilles de la feuille Detailcluster.vb
16 décembre 2009 06:55:42 :
Optimisation affichage listview dans la feuille Detailcluster.vb
16 janvier 2010 17:09:26 :
Modification dans les feuilles Tableclusterntfs et Tableclusterfat pour la recherche des blocs de clusters libres
20 janvier 2010 23:45:26 :
une nouvelle feuille permet d'afficher les informations S.M.A.R.T pour les disques durs physiques.Un grand bravo à ShareVB pour sa source dont je me suis inspiré pour la passer en VB NET (http://www.vbfrance.com/codes/LECTURE-ATTRIBUTS-SMART-DIQUE-DUR-IDE-TEMPERATURE-DISQUE_7826.aspx)
09 février 2010 21:22:24 :
Optimisation du code dans la feuille Detailcluster.En FAT on appelait Getvolumebitmap dans la feuille Tableclusterfat puis on rappelait cette même routine dans la feuille Detailcluster. En NTFS c'était identique avec la feuille Tablusterntfs
11 février 2010 00:58:58 :
quelques modifications mineures dans la feuille Fat d'ouverture.
11 février 2010 15:24:11 :
optimisation du code dans les feuilles Drivefrm.vb, Ntfsfrm.vb et Farfrm.vb
04 avril 2010 00:26:34 :
Un bug a été corrigé lors de l'exploration des répertoires en NTFS
25 avril 2010 22:55:18 :
La défragmentation a été supprimée : elle n'était ni fiable ni pleinement opérationnelle. Néanmoins aucun danger pour la partition n'a été engendrée depuis
25 avril 2010 23:40:53 :
J'ai oublié d'ôter 4 contrôles après la suppression de la défragmentation. Mille excuses
20 mai 2010 23:21:46 :
Plusieurs erreurs minimes ont été corrigées ( principalement dans la feuille analyse.vb). La représentation des clusters de cette même feuille a été affinée
24 mai 2010 22:00:35 :
La feuille Mapcluster a été modifiée : la picturebox représentant la zone de clusters visualisée est plus précise et on peut cliquer la picturebox représentant la totalité des clusters du disque pour visualiser une partie de disque en détail
03 juillet 2010 16:22:10 :
Correction d'une erreur dans la feuille Mapcluster.vb
05 juillet 2010 11:58:16 :
Modification dans la feuille Analyse.vb
15 juillet 2010 02:30:02 :
Dans la procédure Afficheclusterslibres de la form Analyse.vb on a oublié pour le tableau Tablecluster des blocs de clusters libres et occupés de tester si en fin de partition il y a un bloc de clusters occupés suivant le dernier bloc de clusters libres.C'est réparé
18 juillet 2010 17:51:17 :
Dans les forms Analyse.vb et Detailcluster.vb la procédure d'initialisation de la Picturebox Initialisepicvolume comportait des erreurs au niveau de la cartographie des blocs de clusters d'une partition
01 août 2010 09:22:21 :
Une erreur dans la forme analyse.frm au niveau de l'ATTRIBUT_LIST en NTFS a été découverte : le cas d'un attribut non résident n'avait pas été traité de plus dans cette même forme on peut voir si un fichier est fragmenté ou non (colonne Frag de la listview des fichiers)
25 août 2010 22:22:10 :
Une erreur dans la feuille Fatfrm.vb pour la taille totale de la partition en octets ( il faut faire le calcul avec des variables de type Long et non Integer)
29 août 2010 16:20:19 :
- correction d'une erreur dans la feuille Detailfrm.vb pour l'affichage de l'enregistrement utile et de l'entête d'un enregistrement en NTFS
17 septembre 2010 21:38:45 :
La feuille Analyse.vb contient une nouvelle grille sur l'occupation des clusters de la partition
10 octobre 2010 00:49:32 :
Simplification dans les routines Tri-Quicksort du projet
21 octobre 2010 18:20:41 :
J'ai supprimé la feuille Mapcluster qui faisait double emploi. Une barre de progression est visible pendant l'exploration des clusters libres de la partition
10 mars 2011 15:43:45 :
La feuille Analyse.vb permet la défragmentation de fichiers en FAT et en NTFS
13 novembre 2011 16:28:12 :
Un gros bug a été découvert au niveau des noms de fichiers en NTFS ! et cela bloquait le programme ! Pour faire simple NTFS est une base de données d'enregistrements NTFS . Chaque enregistrement concerne un fichier et un enregistrement fait 1024 octets . Si l'enregistrement est trop petit NTFS crée un enregistrement d'extension associé à l'enregistrement de base . Hors certains noms de fichiers très longs peuvent se retrouver dans ces enregistrements d'extension et non dans l'enregistrement de base . Pour afficher les icônes dans le projet il faut le nom complet su ficher avec le chemin . en remontant les répertoires jusqu'à la racine si un nom de répertoire était dans un enregistrement d'extension cela bloquait ! C'est corrigé dans toutes les feuilles du projet concernant le NTFS !
05 février 2012 18:15:57 :
Plusieurs modifications et mise à jour 1 ) un bug se déclenchait dans certains cas en NTFS pour rechercher le nom long d'un enregistrement ! Ce nom n'est pas toujours dans l'enregistrement lui-même mais parfois dans des enregistrements d'extension 2 ) on bloque l'écran de veille à l'entrée du programme et on le ré-autorise en sortie si celui-ci est actif 3) Dans la feuille Detail.frm pour l'enregistrement complet et utile les codes des attributs des enregistrements apparaissent en blanc dans la zone de texte adéquate! 4) D'autres petites modifications mineures ont été faites dans le projet pour corriger des mini-erreurs ou des bugs plus sérieux bonne prog à tous et merci !

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) GESTION DU VOLUME SONORE EN VB NET
Source avec Zip Source .NET (Dotnet) BITBLT ENTRE 2 PICTUREBOX EN VB NET
Source avec Zip CALCUL DE CRC16
Source avec Zip ANALYSE DISQUES ET PARTITIONS
Source avec Zip ECRAN DE VEILLE ON/OFF

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
ROUTINE DIR RÉCURSIVE POUR OBTENIR LA LISTE DE TOUS LES FICH... par kerisolde
Source avec Zip Source avec une capture FILE,SECURITY,FICHIER par okosa
Source avec Zip Source avec une capture Source .NET (Dotnet) PATCHEUR DE FICHIER par tototh
Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R... par jack

 Sources en rapport avec celle ci

Source .NET (Dotnet) MODIFICATION DATE DE WINDOWS EN VB.NET ET VBA par us_30
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip ANALYSE DISQUES ET PARTITIONS par Galain
Source avec Zip Source avec une capture CLASSE SUR LES DISQUES/PARTITIONS ==> OBTENTIONS D'INFOS (CL... par violent_ken
Source avec Zip MESURE DISQUE (ESPACE RESTANT, UTILISÉ) par Silas_Duggan

Commentaires et avis

Commentaire de yvesyves le 11/03/2008 17:25:11

Compatible Vb v8.0. Excellente source, apporte beaucoup à la compréhension des systèmes de fichiers. Juste deux remarques, je pense que tu peux améliorer la présentation ;) c'est un peu fouilli. 2eme remarque, cette source mérite largement d'être plus commentée sur ce qu'elle fait, pouquoi. Bien sur c'est un travail fastidieux. 9/10

Commentaire de yvesyves le 12/03/2008 17:29:30 9/10

voila la note

Commentaire de Jeanoot le 12/03/2008 17:51:36

La source vb6 m'avait été bien utile et celle ci est tout aussi excellente.
Excellent travail, vivement la gestion des autres systèmes de fichiers ;-)

Commentaire de Jeanoot le 12/03/2008 17:53:08 10/10

J'ai oublié la note

Commentaire de Galain le 12/03/2008 18:18:01

Merci pour la note. Heureux d'apprendre la compatibilité avec VB net 2005. Pour Yvesyves c'est vrai que la feuille principale NTFS fait un peu fouilli mais on s'y retrouve facilement si l'on connait la structure du système NTFS.
Il faut dire aussi que cela n'est pas facile à faire en VB net après 10 ans de programmation en VB4,puis 5 et enfin 6.
Si tu as des idées pour la présentation elles sont les bienvenues.Bonne prog à tous

Commentaire de Galain le 21/04/2008 17:50:30

Une erreur a été découverte dans le système de fichiers NTFS. cela concerne le cas d'un enregistrement NTFS qui possède un attribut ATTRIBUT_LIST qui est non résident. Ce cas n'avait pas été traité et cela faussait les affichages dans les feuilles traitant le système NTFS. Cette correction est déjà faite dans le projet similaire en VB 6.0 et sera bientôt faite dans le projet VB net. Bonne prog à tous et A+

Commentaire de Galain le 22/04/2008 23:32:21

Les erreurs au niveau de l'attribut ATTRIBUT_LIST en NTFS ont été corrigées.Le programme est maintenant fonctionnel. Bonne prog à tous

Commentaire de Galain le 18/06/2008 22:50:23

La source connait de gros problèmes avec Windows Vista. Sous Xp elle fonctionne nickel néanmoins. Je cherche les solutions

Commentaire de Galain le 22/06/2008 00:35:48

La source connait de gros problèmes avec Windows Vista. Sous Xp elle fonctionne nickel néanmoins. Je ne cherche plus les solutions
Xp utilise l'ISO 9660 pour les CD et DVD et Vista utilise l'ISO 13346 UDF ce qui fait que le CD d'installation de Vista est illisible avec le programme
De plus les CD audio ne fonctionnent pas avec le programme sous Vista
Des problèmes au niveau des disques durs étaient apparus mais ont été solutionnés
Devant cette non-compatibilié Microsoftienne la source est uniquement compatible Windows XP

Commentaire de Galain le 28/06/2008 15:28:43

J'ai réussi à lire les secteurs cdrom et dvdrom sous Vista. Les cd audio fonctionnent aussi correctement. Quelqu'un peut-il me confirmer que sous Windows Xp le projet fonctionne correctement pour les CDROMS (audio et data) et DVDROMS (vidéo ou data) ?
Bien le bonjour à tous et bonne prog

Commentaire de aybe81 le 25/07/2008 18:03:12 9/10

Salut,

Je m'en sers pour lire une MMC au format RAW (Application pour lire/écrire sur une memory card de Pioneer CDJ1000)

Visiblement ça ne marche plus sous Vista : http://support.microsoft.com/kb/942448

Quel est ton pronostic pour Vista ?


Merçi,

Commentaire de Galain le 25/07/2008 18:16:00

Salut AYBE81

Sous Vista j'arrive à lire les disquettes Fat 12, les disques durs FAT 16 et 32, les disques durs NTFS,les clefs USB Fat 16 ou 32 et même les cdroms et dvdroms

Une memory card doit apparaître dans les disques physiques comme les clefs USB

Attention on ne peut pas modifier un secteur ( l'écriture n'est pas programmée)

donne moi plus de précisions en cas de problème

A +

Commentaire de aybe81 le 25/07/2008 20:56:30

La MMC est bien reconnue mais seulement en tant que disque physique, pas logique (RAW).

C'est vraiment très étrange, ca ne fonctionnait pas, (erreurs d'accès), recompilé plusieurs fois sans succès,
je le lance en tant qu'Administrateur, ma machine plante complètement,
quelques heures plus tard (après reboot) cela fonctionne normalement et sans élévation de privilèges ...

Je vais tester un peu plus pour mon usage et je te rapporterais des bugs, si j'en trouve.

ciao;

Commentaire de aybe81 le 25/07/2008 21:02:20

J'ai oublié de préciser,
cela fonctionne seulement en mode Administrateur,

Entre temps j'ai cherché un peu sur le net,

Ce projet en Delphi fonctionne nickel sous Vista, sans avoir à élever les privilèges :
http://sourceforge.net/projects/directdisk/

Celui-ci aussi mais plante à la fin de la MMC :
http://www.roadkil.net/program.php?ProgramID=12

Sinon ces gars-là proposent un SDK (payant :-( qui résout les problèmes d'accès au disque directement, sous Vista :
http://www.eldos.com/rawdisk/download.php

En espèrant que ça puisse t'aider ... :-)

@+

Commentaire de Galain le 25/07/2008 21:25:12

Salut AYBE81
tu dis : La MMC est bien reconnue mais seulement en tant que disque physique, pas logique (RAW).

en tant que disque physique arrives-tu à visionner les secteurs en cliquant sur celui dans la liste des disques physiques( une form apparait et visionne le 1° secteur ainsi que les caractéristiques du disque et son partitionnement)

La MMC apparait-elle dans les listes logiques en tant que partition  

Ta MMC est -elle une carte mémoire d'appareil photo ? car j'ai jamais testé avec cela  

Commentaire de Galain le 26/07/2008 00:12:22

Salut Aybe81

Ce projet en Delphi fonctionne nickel sous Vista, sans avoir à élever les privilèges :
http://sourceforge.net/projects/directdisk/

Il n'a aucun mal à fonctionner car la seule chose qu'il fait est de lire et écrire dans des secteurs soit de partitions soit de lecteurs physiques.
Mon projet le fait aussi mais explore en plus les partitions,les systèmes de fichiers,etc...

A mon avis ta carte MMC est une "partition RAW" non reconnue par mon projet : peux-tu me confirmer ?

A + et bonne prog  

Commentaire de Galain le 26/07/2008 00:56:35

Salut Aybe81

e me suis renseigné sur les partitions RAW : pour moi ce sont des partitions qui ont été créées mais qui n'ont pas été formatées ( elles ne contiennent pas de systèmes de fichiers)
Par contre on peut accéder à cette partition en bas niveau (accès direct au disque avec la lecture et l'écriture des secteurs)

C'est pour cela que le projet en Delphi ne plante pas car il ne se contente que de lire et écrire des secteurs disque

Je vais essayer de créer une partition RAW sur mon PC et voir ce qu'il en est.

A+

Commentaire de aybe81 le 26/07/2008 12:43:55

salut Galain,

La MMC est bien au format RAW, propriétaire à la CDJ1000.
En fait ça sert stocker les points CUE de chaque morceau,
afin de pouvoir se caler dessus directement.

Ton soft fonctionne lorsque je le lance en tant qu'Admin,
et effectivement je ne peux y accèder qu'en mode physique
étant donné que c'est un format propriétaire.

Et je précise, autant l'accès Physique ou Logique nécessite des privilèges,
ce qui m'intéressait dans ce projet Delphi, c'est qu'il n'à pas besoin d'être admin.

Dans l'idéal il faudrait pouvoir dumper sans privilèges,
(Sachant que c'est uniquement pour lire/écrire une MMC, pas un disque système)

Pour te répondre, oui ça fonctionne correctement, mais en mode admin. uniquement.

Je vais regarder plus en détail,

@+

Commentaire de Galain le 26/07/2008 13:11:34

Salut AYBE81

Je me suis renseigné sur le format RAW et j'ai appris que c'est un format propriétaire surtout utilisé dans les appareils photos numériques et téléphones mobiles entre autres.Ce format sert pour les Memory Cards de ces appareils.
Par extension on dit aussi que le format RAW est un format brut pour une partition.

J'ai créé une partition RAW sur mon PC ( on crée une partition sans la formater)

Dans mes disques logiques elle est reconnue mais on demande d'insérer un support c'est à dire qu'on ne reconnait pas le système de fichiers de cette partition. Et de plus il n'y en a pas.

Dans disque physique j'ai ma partion NTFS plus cette partition RAW. La partition RAW est reconnue comme une partition FAT 16 ( code 06) dans la cartographie du disque.Mais on voit très bien en affichant le 1° secteur de la partition RAW que celui-ci est vide et ne correspond donc point à un secteur de boot de partition NTFS ou FAT.

quand au problème des provilèges j'ai toujours été admin sur mon poste chez moi.Je vais regarder ce que l'on peut faire.

a+ et bonne prog

Commentaire de aybe81 le 26/07/2008 20:33:16

Ou également, une partition (NTFS ou FAT) peut devenir un partition RAW suite à de mauvais drivers installés ou une erreur de données.

Voilà sinon concernant ton programme, ça marche sans problèmes,

J'ai commencé à m'attaquer un peu à CreateFile voir ce qu'il était possible mais à vrai dire il était un peu tard ...

En fait dans mon logiciel, l'utilisateur n'est pas nécessairement l'admin., ce qui complique un peu les choses.

Je vais continuer à regarder un peu ton prog. et si je trouve une amélioration concernant les privilèges je te fais signe.

(Dans l'idéal, je souhaiterais convertir ton programme en une classe autonome, ré-utilisable)

ok @ bientôt

Commentaire de boutemine le 26/08/2009 15:55:22 10/10

Superbe 10/10

Commentaire de Galain le 30/08/2009 16:20:38

Merci Boutemine pour la note

Commentaire de boutemine le 30/08/2009 16:25:55

Enfin, Je te conseille d'organiser un peu le code selon le style OOP, car un débutant sera incapable de déchiffrer les offsets sans la spécification du FAT.

Commentaire de Galain le 30/08/2009 16:40:24

Salut Boutemine
Qu'appelles-tu "organiser un peu le code selon le style OOP" ?
Je ne vois pas du tout ce que cela veut dire
Et merci encore

Commentaire de boutemine le 30/08/2009 16:46:48

Salut Galain,
Ce que je voulais dire c'est utiliser un peu les pratiques d'orienté objet.
Par exemple, les structures de données. Un bon cas est la structure du Boot sector et le BPB. vaut mieu d utiliser une structure de données avec quelques méthodes statiques pour les opérations courantes(Récupération du BS d'un device).

Apres une petite analyse, j ai vue que le code est presque a 100 orienté modules et GUI, ce qui rend l'apprentissage depuis le code trop difficile

Personnellement, j ai trouvé pas mal de trucs que je chercherais mais après une lecture approfondie de la spécification FAT de microsoft.

Quand même, un source noble sur le net ;-)
Salutations

Commentaire de Galain le 30/08/2009 17:13:56

Ok : je vois ce que tu veux dire
Je referais certainement une mise à jour en recodant tout cela dans des structures plus compréhensibles
A l'origine la source était en VB 6.0 et j'ai repris la même structure pour le passage de la source en VB Net

Commentaire de Willi le 28/10/2009 23:01:49 administrateur CS

Galain,
Dans ta source et meme dans d'autres je retrouve régulièrement le terme de "Runs" genre RunsCount RunsList.
Quelle est sa définition au sein du système de fichier NTFS ?

Willi.

Commentaire de Galain le 29/10/2009 07:03:34

Salut Willi
un petit cours très rapide
En NTFS chaque fichier se voit attribué un enregistrement de type File. Dans cet enregistrement sont stockés ce que l'on appelle les attributs du fichiers. NTFS est semblable à une base de données.
Parmi ces attributs celui qui nous intéresse est l'attribut DATA.Un enregistrement ayant une taille limitée (4 koctets) 2 cas peuvent se présenter
- les données du fichiers peuvent tenir dans l'enregistrement : l'attribut DATA sera résident
- les données ne peuvent être contenues dans l'enregistrement : l'attribut DATA sera non résident.Pour trouver les données du fichier on définit une runlist. Cette runlist n'est que le chainage des clusters utilisés par les données du fichiers. C'est à comparer avec le chainage des clusters en FAT

D'autres attributs que DATA peuvent être résidents ou non résidents
La runlist travaille avec les VCN (Virtual Cluster Number) c'est à dire que l'on connait le premier bloc de clusters et, si le fichier est fragmenté, les autres blocs seront désignés par l'offset par rapport au bloc précédent.

Je vais rechercher sur le Net l'URL d'un cours sur NTFS et te l'indiquerai
A+  

Commentaire de Willi le 29/10/2009 11:36:37 administrateur CS

Une entrée MFT a une taille minimum d'1Ko par contre taille limite de 4Ko je ne savais pas.
Certains attributs sont en permanance résidents mais pour les autres j'avoue j'ai même après ton explication un peu de mal à piger l'histoire de la runlist avec les attributs non résidents.
Autre question concernant les types attributs existant. Qu'est ce que les attributs 'ATTRIBUTE_LIST','EA_INFORMATION','INDEXROOT' et 'INDEX_LOCATION' ??
Est-il possible de retrouver l'offset de départ d'un fichier ? (je ne parle pas dans la MFT).

Willi.

Commentaire de Galain le 29/10/2009 18:56:01

Salut willi
J'ai dit une enregistrement MFt avait une taille limitée mais il faut comprendre que tous les enregistrements ont tous la même taille. Le cas le plus fréquent est de 1024 octets (1 Ko). Si les attributs de l'enregistrement font que l'enregistrement est trop petit on se sert des attributs non résidents.
Un fichier texte de 20 octets aura l'attribut DATA résident alors qu'un fichier texte de 15 Ko aura ses données (attribut DATA) non résident.
-ATTRIBUT_LIST permet pour un enregistrement donné d'avoir des enregistrements complémentaires car dans ce cas un seul enregistrement n'est pas suffisant por contenir tous les attributs. Certains attributs sont contenus dans l'entrée MFT principale alors que les enregistrement complémentaires sont contenus dans l'ATTRIBUT_LIST de l'enregistrement principal. Si on veut ATTRIBUT_LIST est une série de pointeurs pour les enregistrements complémentaires.
-EA_INFORMATION : Attribut plus utilisé à ma connaissance
-INDEX_ROOT et INDEX_ALLOCATION : ces attributs sont spécifiques aux répertoires. Si le répertoire contient peut de fichiers ou de sous-répertoires ceux-ci sont contenus dans l'attribut INDEX_ROOT. Si l'attribut INDEX_ROOT n'est pas suffisant on utilise en plus l'attribut INDEX_ALLOCATION qui contient une Runlist ( même principe que pour l'attribut DATA ) Qui contient la liste des clusters où aller chercher les index des sous-répertoires et fichiers de ce même répertoire.

Pour trouver l'offset de départ d'un fichier il est obligatoire de lire les informations dans l'enregistrement de ce même fichier dans la MFT.
Si le fichier a ses DATA résidentes les données du fichier sont dans l'attribut DATA de l'enregistrement . Dans le cas de DATA non résidentes il faut passer par le runlist pour trouver les clusters contenant les données du fichier

Pour les répertoires c'est les attributs INDEX_ROOT ( et INDEX_ALLOCATION si nécessaire) qui permettent de retrouver le contenu du répertoire.

Je peux te dire que je me suis souvent arraché les cheveux et friser la migraine pour arriver au résultat que permet cette source.
Je t'enverrai l'adresse d'un site expliquant NTFS mais c'est en anglais
A ta disposition et A+    

Commentaire de Willi le 29/10/2009 20:27:13 administrateur CS

Heureusement tu t'y ai intéressé avant moi mais on a en commun le même effet du mal aux cheveux ^^.
Je bosse autour du système de fichiers NTFS je devrais m'en sortir avec ta source ! D'ou mes questions :)
Si tu as un bon lien je veux bien l'anglais me fais pas peur car je trouve un bon nombre de site ou c'est trop léger voir incomplet.

Commentaire de Galain le 29/10/2009 21:06:58

Salut Willi
Peux-tu m'envoyer un message en privé avec ton adresse de messagerie. Ainsi je pourrais t'envoyer la documentation qui m'a servi à créer ce projet. Je n'ai plus le site mais j'ai gardé en téléchargement toute la doc sur clef USB
a ton service et a+

Commentaire de Willi le 01/11/2009 01:03:24 administrateur CS 10/10

Je reprend ta phrase: Si on veut ATTRIBUT_LIST est une série de pointeurs pour les enregistrements complémentaires. Je suis à cheval sur les "termes" désolé. ATTRIBUTE_LIST ce que j'en comprend c'est liste de pointeurs sur les attributs non résidents d'un enregistrement ? On est bien d'accord la dessus ?

Pour les Runs je pense avoir compris merci :)

J'en profite pour mettre la note max. 10 pour le contenu de la source et tes réponses !

Commentaire de Willi le 01/11/2009 16:59:35 administrateur CS

PI: Pour éviter de désactiver l'UAC, executez Visual Studio en tant qu'Administrateur (clic droit sur vs puis Executer en tant qu'Admin). (sous Seven)

++

Commentaire de Galain le 01/11/2009 22:19:25

La source a été modifiée de façon à ce que l'utilisateur prenne connaissance des 2 méthodes pour pouvoir éxécuter la source : en désactivant complètement l'UAC par le panneau de configuration ou en démarrant VB net en tant qu'administrateur.Il va de soit que la seconde solution est de loin la plus préférable
Merci à Willi pour ces précieux conseils

Commentaire de aybe81 le 01/11/2009 22:43:40

J'ai utilisé un peu le soft, et c'est vrai que c'est bordelique !
J'ai pu extraire la partie qui m'intéresse (RAW) mais bon, idéalement il devrait être refait.

Je veux bien participer à une récriture complète en C#.
On pourrait le récrire assez rapidement, à plusieurs.

Galain, fais-moi signe si ça te chauffe.

@+

Commentaire de aybe81 le 01/11/2009 22:59:27

Sous Win 7 / x64,

Je dois changer cette ligne :
<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

par

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Et désactiver ClickOnce,

Après il se lance, sinon il plantait dès le démarrage ...

Commentaire de aybe81 le 01/11/2009 23:00:28

Pour changer cette ligne : Réglages UAC dans les propriétés du projet.

Commentaire de aybe81 le 01/11/2009 23:12:32

Ca plante quand je rafraichis la liste des lecteurs,

{"Overload resolution failed because no Public 'Add' is most specific for these arguments:     'Public Function Add(text As String) As System.Windows.Forms.ListViewItem.ListViewSubItem':         Not most specific.     'Public Function Add(item As System.Windows.Forms.ListViewItem.ListViewSubItem) As System.Windows.Forms.ListViewItem.ListViewSubItem':         Not most specific."}

En fait l'ObjectQuery ne fonctionne plus, tous les membres sont "Property evaluation failed."

Bon, eh bien voila une raison de plus pour le refaire :-)

Commentaire de Galain le 01/11/2009 23:16:45

Merci AYBE81 pour ce commentaire : c'est vrai que c'est bordelique
rien ne t'empèche de le réécrire en C# : c'est du open source
Oui cela me chaufferait bien mais C# je ne connais point
comment tu désactives Clickonce ?

Commentaire de Willi le 02/11/2009 00:16:00 administrateur CS

Prem's je bosse déjà sur le système de fichier NTFS en c# d'ou mes questions ^^. Je vous laisse le reste :)
Je plaisante faites comme bon vous semble !

Commentaire de aybe81 le 02/11/2009 00:55:19

Ok,
En fait il est pas si long que ça, quand j'ai regardé il y 1 an ca me paraissait gros, mais en fait c'est parce qu'il est mal conçu. Maintenant bon, c'est une simple traduction de VB6 c'est normal. Le gros problème c'est que les forms sont vraiments dégeulasses avec plein d'assignations directes, et finalement les modules ne remplissent pas vraiment leur role de module. Mélange français/anglais etc ...

Pour ClickOnce, propriétés du projet, onglet Securité ;-)

Je pense le mieux à faire, tu connais mieux les choses à améliorer dedans, ca serait bien de faire une petite liste.

Idéalement ca serait bien de bosser à plusieurs, sur 1 projet.

Si je le recommence, ca sera en C#, WPF, et multi-langues.
Je commencerais par récrire le système, après l'UI.

Maintenant si on bosse à plusieurs faudra se répartir les tâches.

Voila,

C'est drôle parce que j'ai le même parcours que toi, excepté pour le ZX81, je faisais du VB.Net mais j'ai totalement laché depuis C#. La syntaxe est en verité très simple, aujourd'hui je vois VB avec une syntaxe plutôt lourde et moins efficace.

Tu vas rire, mais en lisant le code je vois des $ ... Je me demande, qu'est-ce que c'est ? Ca m'a pris 30 sec. avant de me souvenir que c'est une chaine de caractères X-)

Aujourd'hui je bosse sur un logiciel de mix audio en C#, alors VB ça me parait très loin !

Commentaire de Galain le 02/11/2009 18:09:05

salut AYBE81
Merci pour les critiques que je trouve assez sévères.Je ne suis qu'un amateur qui s'est passionné avec la programmation en VB.
Le plus gros du boulot a été de comprendre les systèmes de fichiers FAT puis surtout NTFS avec une documentation plus que succinte.
Pour moi le résultat est bien au-delà de mes espérances lorsque j'ai commencé le projet il y a 4 ou 5 ans en VB 6.0
Maintenant si tu sais faire mieux vas-y
A+  

Commentaire de aybe81 le 02/11/2009 21:15:40

C'était pas mon intention, tu as simplement porté ce code vers .NET, ce n'est pas toi qui a mal conçu ce soft à la base.

Desolé pour cette confusion.

Je vais le refaire en C#, bon maintenant ca va pas prendre 2 jours car j'ai du boulot par ailleurs ...

Je te tiens au courant de l'avancée dès que j'ai quelque chose de pas mal.

@+

Commentaire de Galain le 02/11/2009 22:26:24

Désolé de te contredire AYBE81 mais je suis l'auteur de la source et en VB 6.0 et en VB Net et c'est bien moi qui ai conçu ce soft à la base
Mais rassures-toi je ne tiens aucune rigueur quant à tes remarques
bon courage et sans rancune
A+

Commentaire de aybe81 le 02/11/2009 22:30:40

Ok, j'avais compris que tu avais repris ce soft. (Je viens de commencer, je suis sur la première fenêtre :-)

a+

Commentaire de Willi le 03/11/2009 00:15:56 administrateur CS

Bon courage Aybe81 tu t'attaques à un sacré morceau ^^
Le visuel ici on s'en tamponne un peu les amygdales j'ai hate à voir au moins la partie gestion NTFS et FAT.
++

Commentaire de aybe81 le 03/11/2009 00:45:19

Je vais avoir besoin de vous car vous avez certainement glané pas mal d'infos sur les systèmes de fichiers.

@+

Commentaire de Galain le 03/11/2009 23:50:28

Pour AYBE81 : j'ai supprimé les $ des chaines de caractères
Pour Willi : j'ai retenté l'écriture directe de secteurs sur le disque avec Writefile pour la purge des clusters libres. Même en éxecutant en tant qu'administrateur cela ne fonctionne point : problème de privilèges
Tant pis
Bonne prog à tous et A+

Commentaire de aybe81 le 04/11/2009 01:32:21

J'ai fini la detection des partitions, j'ai une vue complète de chaque paramètre,
il faudrait que je fasse des DataTemplate car il y a 51 colonnes.

Sinon j'ai regardé un peu, en gros il faut la même UI pour les deux types de disque.

Maintenant l'écriture directe sur le disque ca sera un chapitre à part ... je suis moyennement chaud à moins d'être familier avec ... Mais bon qui dit lecture, dit ecriture !

Commentaire de Willi le 04/11/2009 19:35:36 administrateur CS

Galain tu n'ouvres pas le lecteur en écriture, mauvais paramètre (2nd) sur l'appel de CreateFile. Tu dois demander la lecture/écriture. (Je me reporte sur une version de ta source qui date de 2 semaines alors je me trompe peut-être).
++

Commentaire de aybe81 le 04/11/2009 20:20:12

Salut tout le monde,

Bon j'ai avancé un peu en C#, je vais m'attaquer à l'affichage du contenu des DD ....

En regardant le code VB, il y a qq declarations incorrectes.
Par exemple, CreateFileA

Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, _
                                                                           ByVal dwDesiredAccess As Int32, _
                                                                           ByVal dwShareMode As Int32, _
                                                                           ByVal lpSecurityAttributes As IntPtr, _
                                                                           ByVal dwCreationDisposition As Int32, _
                                                                           ByVal dwFlagsAndAttributes As Int32, _
                                                                           ByVal hTemplateFile As IntPtr) As IntPtr
  
Tous les Int32 doivent être des entiers non signés, si tu veux, ca va fonctionner tant que tu recois une valeur entre -2147483648 et 2147483647, alors qu'avec un UInteger, cela va de 0 à 4294967294.

Je t'invite utiliser cet excellent outil P/Invoke Interop Assistant, qui te donnera en un clic de souris, la bonne signature, et en VB !

Exemple : (CreateFileA)

<System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)>  _
Public Structure SECURITY_ATTRIBUTES
    
    '''DWORD->unsigned int
    Public nLength As UInteger
    
    '''LPVOID->void*
    Public lpSecurityDescriptor As System.IntPtr
    
    '''BOOL->int
    <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)>  _
    Public bInheritHandle As Boolean
End Structure

Partial Public Class NativeMethods
    
    '''Return Type: HANDLE->void*
    '''lpFileName: LPCSTR->CHAR*
    '''dwDesiredAccess: DWORD->unsigned int
    '''dwShareMode: DWORD->unsigned int
    '''lpSecurityAttributes: LPSECURITY_ATTRIBUTES->_SECURITY_ATTRIBUTES*
    '''dwCreationDisposition: DWORD->unsigned int
    '''dwFlagsAndAttributes: DWORD->unsigned int
    '''hTemplateFile: HANDLE->void*
    <System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint:="CreateFileA")>  _
    Public Shared Function CreateFileA(<System.Runtime.InteropServices.InAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)> ByVal lpFileName As String, ByVal dwDesiredAccess As UInteger, ByVal dwShareMode As UInteger, <System.Runtime.InteropServices.InAttribute()> ByVal lpSecurityAttributes As System.IntPtr, ByVal dwCreationDisposition As UInteger, ByVal dwFlagsAndAttributes As UInteger, <System.Runtime.InteropServices.InAttribute()> ByVal hTemplateFile As System.IntPtr) As System.IntPtr
    End Function
End Class

Lorsque tu le lances,
- tu vas dans l'onglet SigImp Search,
- chosis VB,
- dans name, tapes le nom de la fonction.

http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=14120

Par ailleurs, il est important de mettre certaines de ces fonctions externes dans la classe NativeMethods.

Pour ceux qui veulent les détails http://msdn.microsoft.com/en-us/library/ms182161%28VS.80%29.aspx

Si c'est du charabia pour toi, n'hesites pas surtout !

Bonne prog, a+ :-)

Commentaire de aybe81 le 04/11/2009 22:06:29

Après avoir cherché, le problème vient de :
    
CreateFile(ldrive, GENERIC_READ Or GENERIC_WRITE, _
                            FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                            IntPtr.Zero, _
                            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&)

GENERIC_READ Or GENERIC_WRITE depasse la valeur d'uint.
En enlevant GENERIC_READ et FILE_SHARE_READ, les arguments passent en uint.

Je viens de me rendre compte de ça en le passant en C#.

J'arrete pour aujourd'hui, je pensais pouvoir afficher un ptit secteur ce soir, mais ca sera pour un autre jour ...

Sinon bonne nouvelle, j'ai remarqué que la plupart du code n'est que de simples assignations, ca sera moins long que je pensais.

Voilà ce que j'ai fait pour l'instant : http://img42.imageshack.us/img42/5120/cap00045.png

a++

Commentaire de aybe81 le 04/11/2009 22:09:18

J'ai oublié,

Bien évidemment cela fonctionne toujours en enlevant les attributs que j'ai mentionnés :-)

Commentaire de Galain le 05/11/2009 06:50:54

Salut Aybe81 et Willi
pour Aybe81 j'ai vu ce que tu as fait pour l'instant et c'est vrai que cela fait plus pro et plus propre
Rassures-toi ce n'est pas du charabia pour moi mais j'ai simplement adapté le code VB 6.0 vers VB Net sans me soucier des particularités de VB Net (pas d'orientation objet,pas de Pinvoke pour les DLL,etc....). Cependant ma source a le mérite de fonctionner
en tout cas bravo et bon courage
Pour Willi je vais regarder ce qui cloche au niveau de CreateFile. Merci bien

Commentaire de aybe81 le 05/11/2009 15:48:21

Public Declare Function si c'est pas du Pinvoke, c'est quoi alors ?
lol :-)

Je vous tiens au jus, allez, a la prochaine !

Commentaire de Willi le 07/11/2009 00:35:45 administrateur CS

Galain,
Peux-tu expliquer pourquoi à la lecture d'un enregistrement MFT il faut appliquer un "fix" sur l'update sequence array ??
Je te pose la question car j'ai un soucis avec la manière dont je "fix" l'enregistrement MFT. Ma fonction lève une exception d'accès en zone mémoire non autorisé de manière aléatoire. Je peux lire 10 enregistrements sa plante comme je peux lire 50000 enregistrement sans erreur d'accès mémoire.
Dans ta fonction UpdateSequence tu fais un test si pas de corruption de l'enregistrement. A quoi sert ce test ?

Merci.

Commentaire de Galain le 07/11/2009 01:25:18

Salut Willi
Ah l'Update Sequence : ce fut ma bête noire avant que je comprenne
Que signifie pour toi le mot "fix" ? Car là je ne comprends pas ta question

Maintenant le rôle de l'Update Sequence : généralement un enregistrement MFT est de 1024 octets soit 2 secteurs.Les 2 derniers véritables octets de chacun de ces secteurs sont remplacés par l'Update Sequence Number ( ce sont 2 octets choisis automatiquement par NTFS qui remplaceront les 2 derniers octets des 2 secteurs contenant l'enregistrements). Le tableau de l'Update Sequence Number contient dans ce cas 4 octets et les 2 premiers sont les véritables octets du premier secteur et les 2 derniers sont les véritables octets du second secteur)
Comme dans l'entête de l'enregistrement on a les 2 octets de l'Update Sequence Number NTFS vérifie que ces 2 octets sont bien identiques aux 2 derniers octets de chacun des 2 secteurs et si c'est le cas l'enregistremnt est correct
Pour lire un enregistrement NTFS il faut
- lire tout l'enregistrement ( 2secteurs dans notre cas)
- Trouver l'Update Sequence Number
- Vérifier que les 2 derniers octets de chacun des deux secteurs correspondent à cet Update Sequence Number
- Si oui remplacer les 2 derniers octets du premier secteur par les 2 premiers octets du tableau de l'Update Sequence Number puis remplacer les 2 derniers octets du second secteur par les 2 derniers octets de ce même tableau
Quand j'ai compris cela le test de corruption me servait à vérifier si ce que je disais était correct : maintenant ce test pourrait être supprimé si on le désires

En résumé les 2 derniers octets de chacun des secteurs de l'enregistremment ne sont pas les vraies data de l'enregistrement. Ces vrais octets sont contenus dans le tableau de l'Update Sequence Number et sont remplacés par les 2 octets de l'Update Sequence Number de façon identique sur les 2 secteurs
J'ai du regarder un exemple sur ma source pour ne pas te raconter de bétises.
J'espère que je réponds à ta demande le plus clairement possible
Bonne prog et A+  

Commentaire de Willi le 07/11/2009 11:32:56 administrateur CS

Merci again ^^
OK j'ai pigé le role de l'UpdateSequence. Quand je parlais de "fix" => remplacement de la séquence de fin d'un enregistrement c'est tout !
Pour ceux qui se sont intéressés à la source de ShareVB (http://www.vbfrance.com/code.aspx?ID=44163) j'ai apporté une correction à cette méthode chargé d'appliquer l'UpdateSequenceArray.
++

Commentaire de Galain le 08/11/2009 22:28:20

Aybe81 avait dit : Ce projet en Delphi fonctionne nickel sous Vista, sans avoir à élever les privilèges :
http://sourceforge.net/projects/directdisk/
Ce n'est plus le cas sous Windows Seven : je regarde pourquoi

Commentaire de Galain le 08/11/2009 22:36:08

Le projet en Delphi fonctionne toujours mais avec "Exécuter en tant qu'administrateur" avec Windows Seven
Avec Windows vista il fonctionnait directement
Willi : en écrivant l'écriture secteur disque sous forme d'une Dll avec Delphi penses-tu que cela fonctionnerait ? Car avec l'éxécutable Delphi on peut modifier un secteur disque : j'ai testé

Commentaire de Willi le 08/11/2009 23:34:43 administrateur CS

Je ne pense pas que le fait de passer en Delphi changera quelque chose ! Du code c'est du code. En .net ou vb6 tu peux le faire également reste à connaitre la ou les subtilités pour autoriser l'écriture de données brutes sur un volume.
J'ai regardé la source delphi de DirectDisk, le bouton Write fait appel à une méthode writesector(,) que je n'ai pas retrouvé dans les sources.
Si tu retrouves cette méthode alors je dirais que tu n'as qu'à la copier en vb !

Commentaire de Willi le 08/11/2009 23:49:58 administrateur CS

Oups fatigue fatique. j'ai vu la méthode WriteSector. Elle ne fait rien de spéciale. Galain on voit en privée pour regarder ton code et faire fonctionner ta fontion d'écriture.
++

Commentaire de aybe81 le 09/11/2009 22:54:41

La lecture seulement fonctionnait, pas l'écriture.

Commentaire de aybe81 le 09/11/2009 22:58:56

Voici la cause :

(CreateFile)

Physical Disks and Volumes

Direct access to the disk or to a volume is restricted. For more information, see "Changes to the file system and to the storage stack to restrict direct disk access and direct volume access in Windows Vista and in Windows Server 2008" in the Help and Support Knowledge Base at http://support.microsoft.com/kb/942448.

Commentaire de Galain le 09/11/2009 23:12:41

Salut Aybe81
Merci pour ces précieuses informations : on abandonne donc définitivement toute écriture sur le disque pour ce projet
A+ et bonne prog

Commentaire de aybe81 le 10/11/2009 14:42:05

Salut,

Cela doit être possible mais compliqué, hier je suis tombé sur un article expliquant que .NET pour ce genre de choses c'est pas l'idéal, C++ l'étant car toutes les définitions sont présentes. Par ex, impossible de trouver les définitions de IOCTL_DISK_GET_PARTITION_INFO_EX ... elles existent sans doute.

J'ai bossé un peu hier sur le projet, ca ne marche pas, j'ai fait comme toi : CreateFile puis ReadFile mais j'ai toujours Access Denied ...

Apres j'ai vu qu'il faut impérativement user de DeviceIoControl entre les deux, dans ton projet il est utilisé, mais pas du tout a cet endroit, donc bon, va falloir un gros coup de Pinvoke car DeviceIoControl a besoin d'un certain nombre de déclarations ... à suivre.

A éclaircir !

Commentaire de violent_ken le 23/11/2009 22:18:20 10/10

Salut Galain !

Heureux de voir cette source en .Net, le langage de l'avenir (et avec en plus le meilleur IDE de l'univers : Visual Studio 2008) !!!

Comme pour ta source VB6, BRAVO pour celle ci, c'est vraiment une mine d'informations sur les filesystems assez impressionnante (très rare d'avoir des sources si complètes sur vbfrance).
Bref, 10/10 bien évidemment.



Je vois que c'est ta première source .Net, si tu veux je peux citer quelques (très) modestes conseils pour le codage d'une application vb.net assez conséquente et pointue comme celle ci l'est :


- mettre "Option Strict On" en tête de chaque fichier. Cà permet d'éviter à VB de réaliser des casts automatiquement notamment (ainsi que certains autres concepts comme le late binding...etc.). C'est vraiment pénible comme opération pour tous les fichiers (au passage c'est possible de le faire pour tous les fichiers directement dans les propriétés du projet : Compiler -> Option Strict à On) ==> dans ton projet çà va générer plusieurs centaines d'erreurs...
Mais une fois toutes ces erreurs (triviales pour 99% d'entre elles) corrigées, le code sera beaucoup plus cohérent au niveau du typage des fichiers (par exemple un UInt32 sera stocké dans un UInt32 uniquement et pas casté violemment dans un Int32 signé).
Et le compilateur rejettera parfois des erreurs de codage, à juste titre, qui seraient passées et auraient faussé l'exécution en Option Strict Off.


- utiliser des déclarations P/Invoke via l'espace de nom System.Runtime.Interop (à importer en début de fichier) pour les appels aux fonctions de l'API Win32. Par exemple :
Public Declare Function FindClose Lib "kernel32.dll" (ByVal hFindFile As Int32) As Int32 (déclarations VB6 vieillote)
va devenir en VB.Net :
<DllImport("kernel32.dll")> _
Public Shared Function FindClose(ByVal hFindFile As IntPtr) As Boolean
End Function

Il existe un site excellent pour récupérer les déclarations des fonctions de Win32 pour .Net : http://www.pinvoke.net/. Ne pas hésiter à en abuser !! (gaffe quand même pour les fonctions assez peu utilisées, des fois il y a des erreurs -__-)


- penser aux versions 64-bits de Windows dès le début. Perso j'avais fait l'erreur de coder pour du x86 only dans mon projet, ben quand les utilisateurs ont réclamé du x64 j'ai miséré à tout changer.... :)Plus tôt c'est fait, mieux c'est !
Concrètement, prendre en compte les versions 64-bits çà se traduit principalement par le fait que les adresses mémoires sont codées sur 8 octets en x64 (=64 bits) et 4 seulement en x86 (=32 bits). Bref, il faut utiliser le type IntPtr à tous les endroits où une adresse mémoire est représentée.
Par exemple pour la déclarations FindClose ci-dessus, on utiliser un IntPtr pour le handle (les handles dans Windows sont toujours codés avec 8 octets en x64) sur le fichier en paramètre (et pas le Int32 de la vieille déclaration VB6, qui du coup fonctionnera pas en x64 natif).
Du coup quand le programme (le même, compilé une seule fois et utilisable à la fois en x86 et en x64) sera utilisé sur x86, IntPtr prendra 4 octets, et sur x64 IntPtr prendra 8 octets. Mais comme IntPtr.Size sera déterminé automatiquement par le framework AVANT le démarrage de l'application, il n'y aura aucun changement de code à faire ! FindClose prendra automatiquement un paramètre de bonne taille suivant l'architecture 32 ou 64 bits de l'OS.
Bref, pour savoir si c'est du Int32 ou du IntPtr, faut regarder sur MSDN et convertir les déclarations C en VB.Net. Un DWORD c'est 4 octets donc Int32, un HANDLE c'est 4 ou 8 suivant l'architecture donc c'est IntPtr... etc. Ou bien utiliser http://www.pinvoke.net/, mais malheureusement certaines (très peu) déclarations sont fausses et donc à vérifier sur MSDN.


- On trouve souvent des exemples de code uniquement en C# sur internet, pas en VB.net. Il existe donc des outils de conversion automatiques (très très très efficaces !!) pour répondre à ce besoin : http://www.developerfusion.com/tools/convert/csharp-to-vb/
Cà permet de faire VB->C# ou bien C#->VB.


- Penser à utiliser la programmation objet, c'est à dire l'utilisation de classes réutilisables (et héritables si possible). Cela se traduit par exemple par l'abandon complet de la notion de "module", au profit de classes avec membres statiques.
Ainsi, le module2 deviendra la classe cEcran, et aura comme squelette :

Option Strict On
Public Class cEcran
    Public Shared Function SetResolution(ByVal Width As Int32, ByVal Height As Int32, ByVal BitsPerPixel As Int16) As Boolean
        ...
Return XXX
    End Function
End Class
Appelé par cEcran.SetResolution.

De même, les structures (hors structures pour l'API Win32) doivent être délaissées au profit des classes.
De même, les variables publiques n'existent plus, remplacées par attributs privés + properties (RO, WO ou RW).


Sinon attention au DoEvents, si jamais l'application passe au multithreading dans le futur, çà risque de poser problèmes (cette instruction est à bannir en multithreadé).
Sinon on part du principe que y aura pas de multithreading dans le futur de l'application, on peut alors augmenter les performances en utilisant :

For X as integer = 0 to 1000000
if (x mod 1000)=0 then
Application.DoEvents()
end if
next

plutôt que :

For X as integer = 0 to 1000000
Application.DoEvents()
next

Pour l'utilisateur çà changera pas grand chose niveau réponse de l'application aux requêtes, mais le CPU sera ravi !!!


Sinon us_30 a rassemblé les principales différences entre VB6 et VB.Net (pour les types de variables) dans son tuto, assez pratique : http://www.vbfrance.com/tutoriaux/GRANDEUR-DECADENCE-VB2008_891.aspx



Voilà, j'espère que c'est constructif et assez compréhensible, en tout cas MERCI pour cette source et cet EXCELLENT travail de recherche sur les filesystems !

Au passage, çà marche pour moi sur Windows Seven Pro 32bits pour NTFS (de ce que j'ai pu tester).
@+

Commentaire de Galain le 23/11/2009 23:24:35

Salut Violent_Ken
C'est un réel plaisir de voir ton post
Cela est plus que vrai que ce code est une transformation pure et simple d'un code VB 6.0 en VB net sans utiliser toutes les particularités de VB Net.
Je suis bien conscient que cela ne fait pas très pur au niveau code mais sa réécriture en VB Net "correct" me prendrait un temps fou.Le début du projet en VB 6.0 date de plus de 6 ans si mes souveniers sont bons.
tes modestes conseils sont plus qu'appréciés et si un jour je me décide de la réécrire de A à Z j'en tiendrais compte à plus d'un titre.
Merci bien pour la note et A+

Commentaire de aserf le 03/05/2010 09:41:13

Bonjour,

J'ai trouver votre source tres interessante,
effectivment si vous la reprogrammer un jour je vous conseil de fair des class, cela rendra le code plus "lisible". Mais une migration de vb6 vers vb.net n'est pas toujours facile ...

@VIOLENT_KEN : je suis content que tu es changé d'avis, tu est quand meme passé de "pas de .Net pour moi... a quoi bon migrer vers un language encore plus lent que le VB6 ? Aucun intérêt..." à
"Heureux de voir cette source en .Net, le langage de l'avenir (et avec en plus le meilleur IDE de l'univers : Visual Studio 2008) !!!" ... cela est juste une petit boutade ;-) ... on a beaucoup echangé sur le sujet a l'epoque ... et je suis ravie que tu t'es un peu plus "ouvert" et que finalement tu rejoind ce que je disait à l'epoque...

a++
seb


Commentaire de violent_ken le 03/05/2010 11:28:00

@VIOLENT_KEN : je suis content que tu es changé d'avis, tu est quand meme passé de "pas de .Net pour moi... a quoi bon migrer vers un language encore plus lent que le VB6 ? Aucun intérêt..." à
"Heureux de voir cette source en .Net, le langage de l'avenir (et avec en plus le meilleur IDE de l'univers : Visual Studio 2008) !!!" ... cela est juste une petit boutade ;-) ... on a beaucoup echangé sur le sujet a l'epoque ... et je suis ravie que tu t'es un peu plus "ouvert" et que finalement tu rejoind ce que je disait à l'epoque...



Héhé oui j'ai bien changé d'avis depuis il est vrai ;-)
Faut dire que depuis l'époque où j'avais dit çà, j'ai pu étudier quelques notions (super) importantes en informatique :  réutilisabilité, généricité, flexibilité, obsolescence...etc.

S'il reste vrai que sur les machines de l'époque (par exemple un bon vieux P4 ^^) certains codes d'algorithmie pure restent légèrement plus rapide en VB6 qu'en VB.Net, VB.Net permet bien évidemment des gains de temps monstrueux dans le développement, grâce aux centaines de librairies accessibles et grâce aux bénéfices de la POO.
Et si VB6 est certes plus rapide sur certains bouts de code, c'est évidemment complètement négligeable au vu des pertes de temps nécessaires pour réinventer la roue à chaque fois, alors que les classes du .Net implémentent déjà des milliers d'objets extrêmement utiles et assez optimisés (namespace System.Collections, System.IO...etc.).

Et même pour la vitesse d'exécution, VB.Net se débrouille très bien, et au vu des architectures actuelles (multicore, large quantité de RAM) et au vu de la gestion désatreuse du multi-threading en VB6, il serait kamikaze aujourd'hui d'espérer avoir de meilleures performances en VB6 qu'en .Net.

A partir de là, l'un des seuls arguments en faveur du VB6 s'écroule...

Et on peut ajouter des centaines d'arguments en faveur du .Net par rapport au VB6 : l'IDE qui est 10x plus stable et plus productif, la gestion des exceptions, la propreté du code, la gestion des handlers/delegates/events, la surcharge des opérateurs, la gestion du subclassing, de vrais constructeurs/destructeurs, le garbage collector, la POO (héritage, meilleures interfaces...), l'équivalence à C# (compilé en CIL) pour la réutilisabilité, support natif des architectures x64, 2x plus de code documenté disponible sur le net...
Je m'arrête là, il y a trop de points positifs !


Et c'est sans compter toutes les innovations des versions > 2.0 : LINQ, WCF, WPF...etc.

Bref, .Net çà innove et c'est vraiment, vraiment meilleur que VB6.


Donc à l'époque il faut avouer que je disais une conn*rie, probablement à cause d'une certaine réticence à tourner le dos au langage qui m'était le plus familier ;-) Certainement aussi une méconnaissance de notions fondamentales en développement logiciel (cf. plus haut).

Mais depuis que le fais du .Net (VB ou C#), je ne touche plus au VB6 du tout (sauf exceptions pour récupérer du vieux code à convertir en .Net).



Bref, t'avais raison ;)
@+

Commentaire de aserf le 03/05/2010 11:39:20

Salut,

et tu vas voir que en vb2010 c encors mieux,
tu as le paralellisme completement integrer (je veux pas dir que l'on ne pouvais pas le fair avant), mais maintenant en une ligne de code ... et la pour les gros traitement c vraiment mieux !!

Chez nous on est passer de plusieur 10 ene de ligne de code a,

Parallele.ForEach() ... une ligne sa ce passe de commentaire, et on a fait des test de perf, c'est identique, ...

ensuite effectivement, les generic, les delegate, les interfaces, les dataset typé, Linq, ... font que les performances sont enorme,
on avait une application developper en vb6 qui est passer en .net, des traitement qui prenais 5mn, sont maintenant instantanée ...

Enfin bon, Bonne prog.
Sébastien

Commentaire de violent_ken le 03/05/2010 11:47:49

Yep, et ce qui était codé en X j*h avec VB6, maintenant c'est fait en quelques minutes avec .Net ;)

Sinon j'ai pas encore regardé les nouveautés de vb2010 concernant le parallélisme, j'irai voir çà !

@+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Disque(s) et clusters [ par cedricbi ] Comment faire pour lire un disque cluster par cluster (si cela est possible) ?Merci d'avance 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 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 N° de série d'un disque [ par AVI17 ] Comment récupérer en Vb le n° de série d'un disque donné comme il appararaît dans Outils Système/Informations Système/Composants/Stockage/Lecteurs Me Copier un disque non système [urgent] [ par Kevin39 ] Bonjour tout le monde,Je voudrais copier tout un disque dur (non système, c'est un second disque dur) vers une unitée de sauvegarde en port usb.J'atte Récupérer l'index dun Disque dur [ par NHenry ] Bonjour, Après avoir chercher (je ne trouves visiblement pas les bons mots clés), je viens poser ma question ici. Elle est simple, je veux utiliser Macro heure système [ par WartelleH ] Bonjour, Le calendrier que j'ai créé s'ouvre automatiquement à la date du jour grâce à cette macro à l'ouverture : Dim Col As Integer, DerCol As Integ ACCESS VERS LOTUS NOTE - fichier joint - requêtes sur 2 tables. [ par givemecookies ] Bonjour, Je souhaite envoyer via un bouton (btnmail) une table sous format excel. J'ai parcouru plein de sujet et n'ayant pas trouvé mon bonheur je v [BAR]Cryptage de disque [ par lambene ] Quelles sont les étapes de cryptage d'un disque? Faire des recherches par mots clés dans des documents Word stockés sur disque via un formulaire VBA [ par amiineba ] Bonjour tout le monde, Je dois réaliser une application en VBA, avec une base de données ACCESS, qui doit me permettre de faire des recherches par mo


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales