cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
2 juil. 2005 à 17:01
Profil bloqué -
12 juin 2007 à 22:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
for AMMNR
Good morning
Can you replace these instructions :If tailleenreg% > 127 Then tailleenreg% = 2 ^ (256 - tailleenreg%)
with these instructions
If tailleenreg% > 127 Then
tailleenreg% = 2 ^ (256 - tailleenreg%)
Else
tailleenreg% = tailleenreg% * BytesPerSector& * SectorsPerCluster&
End If
Tell me if it is ok for you with all your disks
Thank you
ammnr
Messages postés4Date d'inscriptionjeudi 3 mai 2007StatutMembreDernière intervention20 mai 2007 19 mai 2007 à 07:45
hi,Galain
i have find problem ,if you C: d: E: volume in format disk use cluster size is 512 or 1024 or 2048 then run this is have error ,if format disk is use 4096 size cluster is ok,my e: volume cluster is 512 (Bytes per sector(offset 0xb) * Sectors per cluster (offset 0xd) =512)so is have error.
please see picture:
http://img69.imageshack.us/my.php?image=45401047zy9.jpg
ammnr
Messages postés4Date d'inscriptionjeudi 3 mai 2007StatutMembreDernière intervention20 mai 2007 18 mai 2007 à 10:35
hi,thank you
You disk E is a USB key ? not is USB key
for disks C and D you have f600 at offset 64 and for disk E you have 0200 at the same offset
use ntfsinfo.exe see my E: is
/////////////////////////////////////////////
NTFS Information Dump V1.01
Copyright (C) 1997 Mark Russinovich
http://www.sysinternals.com
Volume Size
-----------
Volume size : 18201 MB
Total sectors : 37277225
Total clusters : 37277225
Free clusters : 804572
Free space : 392 MB (2% of drive)
Allocation Size
----------------
Bytes per sector : 512
Bytes per cluster : 512
Bytes per MFT record : 1024
Clusters per MFT record: 2
MFT Information
---------------
MFT size : 127 MB (0% of drive)
MFT start cluster : 6291456
MFT zone clusters : 5065088 - 5417568
MFT zone size : 172 MB (0% of drive)
MFT mirror start : 18783010
Meta-Data files
---------------
////////////////////////////////////////////
I is think say in my C: and D: MFT->BPB offset 0x0040 (Clusters per MFT Record ) is 0xF6 but in my E: ->BPB offset 0x0040 (Clusters per MFT Record ) is 0x02 so in
/////////////////////////////////
............
nsector = CCur(CCur(debmft) * CCur(SectorsPerCluster&))
(nsector =6291454 )
Exploremftrunlist
............
Public Sub Exploremftrunlist()
DirectReadWrite nsector, CLng(tailleenreg%), 0
(CLng(tailleenreg%)=2 dskerr =TRUE have show this "Erreur accès disque en lecture" error!)
If dskerr = True Then
(show this )
MsgBox "Erreur accès disque en lecture", vbCritical
Exit Sub
End If
////////////////////////////////////////////////
I have understood the problem : for disks C and D you have f600 at offset 64 and for disk E you have 0200 at the same offset. I see this problem this week-end
Thank you
ammnr
Messages postés4Date d'inscriptionjeudi 3 mai 2007StatutMembreDernière intervention20 mai 2007 18 mai 2007 à 05:28
hi, in my PC have C,D,E 3 volume is NTFS ,click C or D is OK, but in Introfrm From click E volume is have show this "Erreur accès disque en lecture" error!
Public Sub Exploremftrunlist()
DirectReadWrite nsector, CLng(tailleenreg%), 0
( my E volume nsector=6291454 CLng(tailleenreg%)=2
why tailleenreg is 2!)
If dskerr = True Then
(show this )
MsgBox "Erreur accès disque en lecture", vbCritical
Exit Sub
End If
////////////////////////////////////////////////
click E volume i have see in NTFS From
Private Sub Form_Load()
{
......
d: volue
0x40 f600 0x40 is readoctet(64)
c: and d: is f600
but in E: 0x40 is 0200 so show error
why in E: readoctet(64)=0200 ??
fc_pute
Messages postés6Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention 1 mai 2007 1 mai 2007 à 02:49
Hé ben, moi qui me demandais comment lire plus directement les informations sur un disque je suis comblé.
En tout cas bravo, on découvre des choses ^^
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 9 avril 2007 à 20:52
Salut, petit bug lors de la compilation :
"affsector = Val(Right$(chn$), Len(chn$ - 20))"
doit être changé je pense en
"affsector = Val(Right$(chn$, Len(chn$) - 20))"
Le 16/01/2007 j'ai informé que le defragmenteur du projet peut être utilisé comme projet autonome.Il faut évidemment y joindre les 2 Apis Rectangle et LockWindowsUpdate qui sont dans le module1.bas du projet.Pour déterminer le système de fichier l'Api GetVolumeInformation est à utilser pour déterminer la variable Fsname$ qui représente le système de fichiers.
bonne prog à tous
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 18 janv. 2007 à 01:04
Félicitations pour le suivi de ta source...
A+
Exploreur
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 10 déc. 2006 à 18:10
Salut, oui je vois.
Toi tu as besoin d'un tableau de bytes et il serait plus long de l'obtenir à partir d'une string.
Moi j'ai besoin d'une string, et il serait plus long de l'obtenir par concaténations des valeurs d'un tableau de bytes.
Merci du tuyau Violent_Ken
Mais je vais laisser ma procédure avec un tableau de bytes car ensuite j'utilise les valeurs numériques directement de ces mêmes bytes alors qu'avec la chaine en string il faut faire val(mid$(sbufferOut,position&,1)) pour avoir la valeur en numérique d'un octet à l'offset position& dans la chaine
Corrige moi si je me trompe
De plus cela demanderait une trop importante refonte du programme pour gagner un peu de temps machine
A+ et merci et bonne prog
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 10 déc. 2006 à 14:32
Salut, j'étais en train de coder une prodédure pour rechercher des strings dans un disque dur, et je me suis aperçu que la fonction DirectRead que j'utilisais (relativement proche de la tienne) était beaucoup trop lente (il faut repasser tous les bytes en string, etc ==> temps irréaliste)
Alors j'ai codé çà, c'est beaucoup mieux niveau vitesse (j'égale presque WinHex)
Cà te servira peut être ?
Le principe est tout simplement d'obtenir directement une string à partir du disque (et non plus un tableau de bytes).
En lisant 10000 secteurs en un coup (soient 5,12 Mo), çà roule nickel.
'-------------------------------------------------------
'permet de lire des bytes directement dans le disque
'sortie en String
'-------------------------------------------------------
Public Sub DirectReadS(ByVal sDrive As String, ByVal iStartSec As Currency, ByVal nBytes As Long, ByVal lBytesPerSector As Long, ByRef sBufferOut As String)
'/!\ iStartSec et nBytes doivent être multiples de la taille d'un secteur (512 généralement)
Dim BytesRead As Long
Dim Pointeur As Currency
Dim Ret As Long
Dim hDevice As Long
Dim lLowPart As Long, lHighPart As Long
On Error GoTo dskerror
'obtient un path valide pour l'API CreateFIle si nécessaire
'rajoute "\\." si nécessaire
If Len(sDrive) <> 6 Then sDrive = BuildDrive(sDrive)
'ouvre le drive
hDevice = CreateFile(sDrive, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)
'quitte si le handle n'est pas valide
If hDevice = INVALID_HANDLE_VALUE Then Exit Sub
'détermine le byte de départ du secteur
Pointeur = CCur(iStartSec) * CCur(lBytesPerSector)
'transforme un currency en 2 long pour une structure LARGE_INTEGER
'Pointeur est un Currency, lLowPart et lHighPart sont les 2 résultats de la procédure GetLargeInteger (passage par adresse)
GetLargeInteger Pointeur, lLowPart, lHighPart
'déplace, dans le fichier (ici un disque) pointé par hDevice, le "curseur" au premier
'byte que l'on veut lire (donné par deux long)
Ret SetFilePointer(hDevice, lLowPart, lHighPart, FILE_BEGIN) 'FILE_BEGIN> part du début du fichier pour décompter la DistanceToMove
If Ret = -1 Then GoTo dskerror 'API failed
'création d'un buffer de nBytes
sBufferOut = Space$(nBytes)
'obtention de la string sBufferOut
Ret = ReadFile(hDevice, ByVal sBufferOut, nBytes, BytesRead, 0&)
dskerror:
'ferme le handle (arrive ici même si aps d'erreur)
CloseHandle hDevice
End Sub
Dans la mise à jour du 03:12/2006 excusez la faute de frappe : il faut lire "Je vais m'occuper de cela".
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 23:41
Alors pour l'offset de départ, c'est théoriquement "le premier secteur de la partition dans le cas où plusieurs partitions sont stockées sur le même disque dur physique" comme tu le dis.
Mais bu que çà bugue avec les disquettes, je vais revoir çà.
Merci, @+
Merci pour les infos je vais regarder
Pour ta classe tout m'a l'air Ok mais qu'est-ce que l'offset de départ pour toi : est-ce le premier secteur de la partition dans le cas où plusieurs partitions sont stockées sur le même disque dur physique ( cela renvoie un negatif pour les disquettes)
A part cela tu as mis en commentaire Renvoie le liste des drives physiques de 0 à Ubound -1 : ce sont les disques logiques mais cela n'est pas grave
sinon très beau travail
Pour le listmft.textmatrix vu que cette liste n'est remplie qu'une fois cela n'est pas très grave mais j'ai fait la modification et le gain de temps est appréciable
Merci bien et A+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 21:53
Salut, alors
1) Pour Listmft.TextMatrix ==> c'est tout simple ; au mieux de faire :
MSFlexGrid1.Row = 2
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "text"
on peut faire :
MSFlexGrid1.TextMatrix(2, 2) = "text"
Les deux méthodes provoquent le même résultat, mais la seconde est plus rapide.
J'ai corrigé pour espace total : j'avais oublié le paramètre Sectorspercluster& et pour une disquette il est égal à 1 ce qui moi n'engendrait pas d'erreur vu que je testais avec une disquette
1) il y a divers bugs dans certaines form ==> essaie de compiler ton programme, VB t'alertera sur les lignes qui posent problème (majoritairement des controles qui n'existent plus et qui sont appelés, exemple : Fatfrm.lchemin.Clear): cela est réglé
> utiliser Listmft.TextMatrix pour remplir Listmft, plutôt que de changer Col et Row et de faire Listmft.Text=... (gain de temps énorme aussi): peux-tu m'en dire plus ( je ne connais pas)
De même, il est possible de locker l'affichage des List/ListViews avec les APIs ValidateRect et InValidateRect.Là non plus je ne connais pas
concernant ta classe sur les infos de partitions elle est très bien faite : vu qu'elle est faite avec les Api Windows elle va me permettre de vérifier mes infos partitions faites avec la lecture directe dans les secteurs
Merci pour tout
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 19:28
Salut, encore moi, j'ai 2 remarques sur ton code source :
1) il y a divers bugs dans certaines form ==> essaie de compiler ton programme, VB t'alertera sur les lignes qui posent problème (majoritairement des controles qui n'existent plus et qui sont appelés, exemple : Fatfrm.lchemin.Clear)
2) tu peux diviser par 2 ou 3 le temps d'exécution de la procedure Exploremftrunlist (qui prend 3 minutes pour un disque dur de 200 Go dans l'état actuel).
Il suffit de
> locker le rafraichissement du controle Listmft en faisant :
Listmft.Redraw = False (en début de Sub)
Listmft.Redraw = True (en fin de Sub)
Comme ceci, les changements effectués dans le tableau (.Text=...) ne seront pas rafraichis au moment de leur création ; donc gain de temps considérable
> utiliser Listmft.TextMatrix pour remplir Listmft, plutôt que de changer Col et Row et de faire Listmft.Text=... (gain de temps énorme aussi)
De même, il est possible de locker l'affichage des List/ListViews avec les APIs VaidateRect et InValidateRect.
@+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 18:52
Mais dans ce cas, le résultat donné sera celui d'avant (taille totale réelle, mais pas effective).
Utilise :
CCur(CCur(BytesPerSector) * CCur(SectorPerCluster) * CCur(TotalClusters)) pour avoir le résultat de Windows.
La différence correspond à 17 clusters sur ma clé USB.
@+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 18:44
Désolé, j'avais téléchargé la dernière version juste après que tu aies dit "Pour la taille totale j'ai fait la correction", mais la MAJ n'avait pas encore été effectuée.
Et pour répondre à la question, non, ce n'est pas résolu chez moi.
La taille donnée est de environ 32Mo pour une clé de 1Go (donc c'est faux).
Concernant le problème en lui même, il semble que la taille REELLE totale soit effectivement celle que tu donnais avant (à savoir Nmbre de secteurs * BytesPerSector).
Cela étant, il est préférable d'utiliser la véritable taille donnée par Windows pour le calcul de l'espace disque restant/utilisé/pourcentage.
Donc si l'on veut compter la taille "libre" ou "utilisée" sur le disque mieux vaut prendre la taille donnée par Windows, ou sinon on prend la taille que tu trouves.
Salut Violent_Ken
- Ton prog. me donne 2 à 62895 en précisant que les clusters 0 et 1 sont réservés, ce qui fait 62896 clusters, alors que j'ai 62894 clusters.Il faut lire Numéros (N°) des clusters utilisables et non nombre de clusters utilisables.tu as bien 62894 clusters utilisables (62895 - 2 + 1) et ces clusters vont du numéro 2 au numéro 62896
- Pour la taille totale je regarde
Merci pour ta participation active et à tout à l'heure
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 12:23
*différentes de celles données par ton programme
@+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 nov. 2006 à 12:10
Salut, je suis en train de coder une classe pour récupérer les infos sur les partitions.
Problème : mes infos ne concordent pas avec les tiennes, et WinHex (éditeur disque professionnel) me donne raison (pour la FAT que j'ai testée).
Les infos susceptibles d'être fausses sont (de celles que j'obtiens pour l'instant):
-N° des clusters utilisables : ton prog. me donne 2 à 62895 en précisant que les clusters 0 et 1 sont réservés, ce qui fait 62896 clusters, alors que j'ai 62894 clusters.
Le problème est ici je pene (ligne 2382 de fatfrm): Param.AddItem "N° des clusters utilisables : de 2 à" + Str$(Totalclusters& + 1) ==> il faut mettre (Totalclusters& - 1) à la fin.
-taille totale : la valeur donnée est différente de celle que je trouve (et qui est donnée par Windows). Par contre, je n'ai pas regardé en détail comment est obtenue cette info et donc d'où vient cette erreur.
Je te préviens si je trouve d'autres info différentes que ton programme quand j'aurais codé le reste de ma classe.
@+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 17 nov. 2006 à 18:58
Salut Violent_Ken
Ce n'est pas un bug mais il faut suivre les recommandations de Microsoft trouvées sur MSDN
1° Le nombre d'octets lus ou écrits doit être un multiple de la taille d'un secteur du disque
2° L'offset du premier octet lu ou écrit doit être un multiple de la taille d'un secteur .Divise 536870912 par 512 et tu auras 1048576 donc 2 ^ 29 est un multiple de 512 et là ReadfileEx fonctionne. Si tu prends 10 ^ 8 soit 100000000 / 512 cela donne 19531,25 et 100000000 n'est pas un multiple de 512 donc ReadfileEx plante)
C'est un bug inconnu.Tu as des disques durs NTFS de 200 Go.Sélectionne le disque dur physique 0 ou 1 ; Dans la fenêtre qui s'affiche tu peux lire le nombre de secteurs de ton disque dur physique.Dans la zone de texte verte en bas à gauche rentre le numéro de secteur du dernier secteur physique de ton disque dur ( de 0 à XXXXXXXXXX). C'est le XXXXXXXXXX.Dis moi si tu affiches le secteur en héxadécimal.La valeur max d'offset pour l'octet à afficher est sur 64 bits ( les 2 valeurs 32 bits de overlapped)
J'attends ta réponse
a+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 9 nov. 2006 à 20:59
Salut, encore moi ;)
J'ai un problème avec la procédure DirectReadWrite (en mode Read). Il semble, que pour des valeurs élevées de l'offset, elle ne puisse plus assurer son rôle (ReadFileEx renvoie 0).
Exemple avec istartsec = 10^8, ReadFileEx échoue.
Cependant, pour 2^29 (qui est bien sur >10^8) , ReadDileEx réussi.
C'est bien cela à part 3 petits points
1° On lit n bytes et n est un multiple de la taille d'un secteur disque (je n'ai pas testé avec des valeurs différentes)
2° La petite gymnastique avec SetFilePointerEx : l'offset du secteur par rapport au début du disque ou de la partition tient sur une valeur 64 bits. VB6 gère les 32 bits signés. On décompose la variable pointeur de type Currency en 2 valeurs 32 bits signées qui se retrouveront dans la structure Overlapped pour lire ou écrire le secteur pointé
3° En lecture on prépare un tableau de bytes que la procédure remplit en lisant les octets sur le disque et en écriture le tableau contient déjà les bytes à écrire sur le disque.
Merci pour tes appréciations et bonne prog pour ton super éditeur héxadécimal
A++
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 5 nov. 2006 à 18:58
Oh my god !!
Je cherchais une source qui illustrait l'utilisation des APIs permettant d'accéder directement au disque, ben là je suis servi !
La procédure DirectReadWrite est pile ce que je cherchais.
Donc si je résume de manière énorme ; (en mode lecture)
-on obtient le handle vers le disque avec CreateFile
-on lit n bytes avec ReadFile
-la méthode est analogue avec l'API ReadProcessMemory.
C'est bien cela ? J'avoue que je suis un peu perdu devant tant de lignes de code.
Projet remarquable, en tout cas.
@+
alosamoelle
Messages postés129Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention23 mai 20091 10 oct. 2006 à 15:22
Un grand merci à Pekch pour tes appréciations. Au début du projet ( il y a environ 1 an) le projet fonctionnait sur un 14 pouces en affichant tout.Ensuite j'ai eu un moniteur plus grand ( 15 pouce) et j'ai ragrandi les feuilles pour éclaircir un peu car cela était très tassé au niveau affichage.Au niveau ISO on peut créer un fichier ISO à partir d'un support CDROM ou DVDROM : l'analyse de la structure d'un fichier ISO n' a pas été programmée
Pour la refonte en MDI et l'accés aux infos par menu cela demanderait une refonte complète du projet surtout au niveau des 3 feuilles principales : Fatfrm,Ntfsfrm et Cdromfrm
Le projet était à l'origine une étude du système de fichier FAT une fois que les procédures d'accès direct en lecture et écriture sur disque furent opérationnelles.Ensuite le NTFS (demandé par les visiteurs de ce projet) et le CDFS furent les suites logiques de ce projet.
un grand merci pour les commentaires encourageants et bonnes vacances à tous
pekch
Messages postés51Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 7 juillet 2006 13 juil. 2006 à 10:56
PS : J'ai pas encore tout exploré, mais au travers des commentaires j'ai cru comprendre qu'on pouvait ouvrir une structure ISO, me trompe je?
pourrait on faire en sorte d'analyser une structure ISO contenue dans un fichier sous forme d'image?
pekch
Messages postés51Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 7 juillet 2006 13 juil. 2006 à 10:53
salut et bravo pour ce projet!
c'est vraiment du beau boulot et je me demandais justement si un tel acces direct etait possible en VB : j'ai eu ma réponse.
le seul probleme que j'ai trouvé est qu'il faut un écran sacrément balais pour pouvoir utiliser le soft. j'ai un 14 pouces et je ne peut pas tout afficher (d'origine)
ne serait ce pas plus ergonomique de faire une refonte en MDI, avec l'accès aux infos par menus?
merci en tout cas, très pédagogique!
jejelebogosse
Messages postés4Date d'inscriptionvendredi 4 février 2005StatutMembreDernière intervention 4 juillet 2006 3 juil. 2006 à 11:24
Bravo tu es mon gourou
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 août 2008 28 juin 2006 à 18:37
Toutes mes excuses, j'ai juste fait une bete erreur de lecture il n'ya pas d'eereur dans ton code (en tout cas pas celle que j'ai mentionné au dessus).
Bonne continuation
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 août 2008 28 juin 2006 à 17:52
Bonjour,
Travaillant actuellement, sur un projet qui utilise aussi cette maniere pour lire directement le disque dur (j'ai beaucoup apris avec ton code), je viens de remarquer ce qui me semble etre une légere erreure :
La table des partitions devrait commencer a l'offset 446 (ou 1BE en hexa). Or quand j'explore la table des partitions avec ton programme, je constate qu'elle commence a l'offset 448 (ou 1C0).
Je ne sais pas si c'est moi qui me trompe ou si ton programme présente une erreur.
PS : Cela arrive quand j'explore les partitions FAT32 et que je clique sur "secteur de boot" dans le menu du haut.
J'ai oublié : un grand merci à Willi et à sa source sur la représentation graphique des clusters d'un lecteur en VB net . Sans cette source la feuille Visucluster serait encore aux oubliettes
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 janvier 20161 6 avril 2006 à 13:07
Magnifique travail: je travaillais sur un sujet similaire mais en assembleur et c'est en cherchant comment réaliser des accès directs "entrée-sortie" sous Windows XP que je l'ai découvert.
Inutile de dire que mon projet est définitivement abandonné. Il serait vraiment dommage que votre réalisation soit méconnue et je vous encourage vivement à l'améliorer.
A ce sujet, un petit bug: la FAT16 des disques durs n'est pas reconnue et traitée comme une FAT12 ce qui provoque une erreur d'exécution. Il faudrait quelque chose comme:
IF FSName$="FAT" AND car$ > "B:" THEN FSname$="FAT16" else FSname$="FAT12"
Apparemment les clefs USB ne sont pas reconnues mais c'est surtout l'interface utilisateur qui mériterait, à mon sens, d'être aménagée.
Connaissant très bien, et pour cause, son projet, l'auteur ne réalise pas toujours combien celle ci peut être déroutante de prime abord.
Ainsi, il y a certaines redondances dans l'affichage des numéros de secteurs et de clusters et l'absence de menus déroulant nécessite une taille d'écran importante. Il faut aussi se livrer à un petit calcul pour afficher une FAT. Manque aussi certaines fonctions dont l'implantation ne devrait pas poser de problèmes. Tout cela n'est pas bien grave sans doute mais en publiant la source de votre projet, vous courrez le risque de le voir "bidouillé" par certains, voire carrément accaparé. Ce qui serait vraiment regrettable.
Encore une fois: félicitations et merci.
Salut Unreal
Cette source est un gros programme qui explore la structure des disques durs, disquettes et CDROM et s'adresse à des personnes ayant des connaissances suffisantes au niveau des systèmes de fichiers. Rien par contre ne t'empêche d'apprendre et de comprendre ensuite : même moi parfois je remets en question mes connaissances dans ce domaine et en apprends encore. Quant à ton petit module comme tu dis tu penses sûrement à un éditeur héxa-Ascii.Cela se trouve facilement sur le site ou sur le Net. Merci pour ton appréciation et A +
Galain
cs_Unreal
Messages postés89Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention26 mars 2006 27 mars 2006 à 21:57
lol joli source, mais quand je suis venu dessus je me suis dit "j'espere que ce seras un petit module de lecture/ecriture sur un disque" lol eh ben nn c'est deja du gros module :)
la source est bien mais je ne comprend pas grand chose... y aurait-il un module ou un bout de code quelque part qui permette la lecture/ecriture sur un disque facilement (style un éditeur comme bloc note :p) voila merci
Salut Yoman64
Je constate que tu es un fervent supporter de cette source
J'ai entendu parler de ext2/ext3 mais je ne connais point
Qui sait ? Peut-être un nouveau créneau à explorer ?
Merci et A+
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 20 févr. 2006 à 13:16
La mise à jour du 04/02/2004 comporte 2 erreurs de frappe : voici la raison en texte correctement frappé
Une petite erreur s'est glissée dans la feuille Cdromfrm : le fonction CdromDvdStructure nous donne par calcul le dernier secteur lisible de la dernière session et non pas de la première session
Désolé et bonne prog à tous
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 30 janv. 2006 à 07:52
Salut GALAIN !
Merci de ta compréhension.
Autre erreur de compile désormais : GetTOC indéfini dans AudioFrm_Load
J'ai simplement recompilé pas retesté. Pas le temps pour l'instant..
Salut à tous et en particulier à ELDIM
1° J'ai réglé les problèmes de compilation et j'ai testé : aucun problème signalé
2° "Si on attends pas que la fenêtre d'attente se termine cela plante" : Dans ce cas le programme doit se mélanger les pinceaux et des informations nécessaires à l'évènement en cours n'ont pas encore été traitées dans l'événement précédent
j'ai mis des routines
for each control in me
control.enabled = true et puis false
next
au endroit qui me paraissent critiques au niveau événementiel
L'idéal est d'attendre le fin de l'attente si on peut dire
3) Pour les autres plantages aléatoires je ne vois pas : je vais retester les modules NTFS pour chercher les cas particuliers de plantage
Rassures-toi je prends tes critiques dans le bon sens et c'est souvent avec des critiques que l'on avance
A+ et bonne prog
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 27 janv. 2006 à 09:43
J'ai retélécharger ce matin : toujours la même erreur à la compile dans la même procedure : CDRomTrackCount indéfini
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 27 janv. 2006 à 09:34
Oups je regardais en bas du tableau... Bref dans le mauvais sens
Hey un peu de respect pour les vendredi matins Yoman64...
lol
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 27 janv. 2006 à 08:31
dernière mise a jour : 26/01/2006 21:19:30 donc 26 janviens
apprend a lire jeune padawan ;)
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 27 janv. 2006 à 07:52
De quelle mise à jour tu parles ? j'ai téléchargé le zip hier et ça a planté ?... Et ta dernière mise à jour semble dater du mois de juillet ?...
Au niveau des plantages : si on attends pas que la fenêtre d'attente se termine pour cliquer quelque part ça plante... lorsque je clique sur détail des enregistrements MFT ça plante de temps en temps, y a d'autres menu où les plantages sont alléatoires.
Je pense que ça vient de la gestion événementielle qui fait que l'appli se mélange les pinceaux de temps à autres.
Mais je te rassure si on passiante suffisemment ça fonctionne bien.
(Sauf pour la compilation... j'ai mis en commentaire la procedure...)
Vu la quantité d'infos ramenées pas étonnant que ça prenne du temps... Peut-être qu'avec une lecture partielle en fonction de l'affichage accélèrerait les traitements... ?
Déja vu le niveau de l'appli c'est de l'excellent travail !
Salut ELDIM et merci pour ta note
- La compilation ne plante plus sur "Lecturetoc" dans la mise à jour
- Pour la lenteur cela est vrai que certaines routines ne sont nullement optimisées mais VB y est à mon avis aussi pour quelque chose
- Peux-tu m'en dire plus au niveau des plantages ?
- Pour l'adaptation en .net le problème est que je n'ai point VB Net
Mon souci actuel est que les résultats au niveau de la TOC des DVDROM ne me parait pas conforme par rapport aux logiciels professionnels (Isobutser entre autres). Je cherche la solution
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 26 janv. 2006 à 09:43
Bonjour,
Je viens de décourvrir ce source
J'ai mis 9
Fabuleux, on apprend plein de truc
J'ai juste enlevé un pour les plantages et la compilation qui plante sur "Lecturetoc" et la lenteur
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 16 janv. 2006 à 11:01
(enfin ça te permettrait de comprendre le comment du bidule)
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 16 janv. 2006 à 11:00
pour le .iso il y a des sources de brunews qui le font mais pas en vb
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 16 janv. 2006 à 08:47
Je te l'ai déja dit , et je vais le redire ... Excellente source :) Très complete elle permet de comprendre la strucutre des systeme de fichiers :) bravo probablement une des meilleures sources de vbfrance :P
Salut à tous
Ceux qui désirent trouver des infos sur le système NTFS peuvent visiter ce site (en anglais malheureusement)
http://linux-ntfs.sourceforge.net/ntfs/index.html J'ai commencé à écrire ce projet pour les systèmes FAT dont je connaissais très bien l'architecture.
On m'a demandé de faire de même pour NTFS et c'est en apprenant,en fouillant sur le NET et en passant beaucoup de temps que j'ai découvert NTFS et ce n'est pas fini.
Quand on sait que ce projet a plus d'un an et demi d'existence on se rend compte de l'investissement qu'il a nécessité.
Le troisième volet de ce projet concerne les CDROM et DVDROM avec les systèmes CDFS et UDF .
Sur ce bonne prog à tous et A+
Galain
laverdanny
Messages postés33Date d'inscriptionsamedi 16 octobre 2004StatutMembreDernière intervention 3 août 2007 7 nov. 2005 à 17:14
Bonjour
je voulais juste suivre les évolutions...
Comment être informé des nouveaux messages sans pour autant en laisser un ?
Mais bon, puisque je suis là...
Galain : où peut-on trouver des info concernant le fonctionnement bas-niveau de NTFS ?
Merci d'avance
laverdanny
Messages postés33Date d'inscriptionsamedi 16 octobre 2004StatutMembreDernière intervention 3 août 2007 7 nov. 2005 à 17:11
Comment être informés des nouveaux messages sans en deposer un ?
Salut à tous et pour information
Directrw ne fonctionne pour l'instant uniquement avec des lecteurs locaux : ne modifier pas le code de la feuille d'introduction pour gérer les lecteurs réseau car les différentes Apis d'accés au lecteur ne fonctionnent plus correctement
Je vais essayer de voir le problème pour autoriser les lecteurs réseau
Salut à tous
Pour Econs je t'ai envoyé un message perso concernant le bug que tu as subi
Dis-moi ce qu'il en est suite à la correction
Merci
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 21 sept. 2005 à 13:17
BUG constaté pendant les essais:
Indice en dehors de la plage sur la ligne ci dessous (Tablemftfrm)
Private Sub Form_Load()
Initable
Quitter.Enabled = True
Table.Enabled = False
Listatt.Clear
For j% = 0 To UBound(Listattr$()) ' <-- erreur ici
Listatt.AddItem Listattr$(j%)
Next j%
Me.Caption = "Tableau des enregistrements de la MFT du lecteur " + lecteur$
End Sub
Ce que j'ai fait :
- j'ai cliqué sur un lecteur, il m'a affiché une belle fenêtre pleine de couleurs avec les caractéristiques de mon disque.
Puis j'ai cliqué sur le menu 'Tableau de la MFT'... Et là, patatra !
Salut à tous
J'ai vu que quelqu'un a mis 1 comme note : je m'en fous mais il aurait pu laisser un commentaire pour expliquer cette note à moins qu'il sache faire mieux dans le même genre de source ( auquel cas je suis preneur !!!)
A bon entendeur salut
Salut à tous
Pour répondre à THE_BEST et pour rassurer les autres.
Cela fait presque 3 semaines que la purge des clusters libres en NTFS fonctionne chez moi sans aucun problème.
Je ne vais tout de même pas vous proposer des fonctions qui risqueraient d'endommager une partition : cela fait plus de 5 mois que cette dernière fonction est en chantier et a été testée sous toutes les coutures par mes soins.
Mais personne n'est à l'abri d'un bug n'est-ce pas ? C'est la raison pour laquelle j'ai mis cet avertissement.
Bonne prog à tous
cs_the_best
Messages postés212Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention 6 avril 2006 7 juil. 2005 à 13:06
Le petit prog c'est qu si il y a un bug et que ça fout en l'air notre disque, bein on va pas essayer... moi j'ai testé sur une disquette...
Salut à tous
Quelques petits bugs corrigés
La purge des clusters libres en NTFS est opérationnelle
Testez cette dernière fonction sur une partition de test et rapportez moi les bugs s'il y en a
Sur mon système cette fonction ne me pose aucun problème quelque soit la partition ( même bootable)
Je préfère vous prevenir ( on ne sait jamais)
Bonne prog et A+
cs_the_best
Messages postés212Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention 6 avril 2006 4 juil. 2005 à 17:17
C'est pas mal, mais domage que certains truc ne sont pas accésibles sous prétexte que c'est des zone réservées qui servent à rien...
cs_neria
Messages postés319Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention16 février 2009 4 juil. 2005 à 16:20
Très belle source, bravo !! Que dire de plus si ce n'est que c'est un peu lent, mais on a accès à tout un tas de paramètres, c'est vraiment bien ! 10/10
12 juin 2007 à 22:02
Les clefs USB en FAT 32 ne posent aucun problème : j'ai testé avec ma propre clef en FAT 16 et 32 et tout roule
21 mai 2007 à 23:48
I am happy for you
Good bye
20 mai 2007 à 12:33
i have see you new version ,it is OK Good thank you again .
20 mai 2007 à 02:44
You can download the new version of this code
I have updated for your problem
Thank you
19 mai 2007 à 17:14
Good morning
Can you replace these instructions :If tailleenreg% > 127 Then tailleenreg% = 2 ^ (256 - tailleenreg%)
with these instructions
If tailleenreg% > 127 Then
tailleenreg% = 2 ^ (256 - tailleenreg%)
Else
tailleenreg% = tailleenreg% * BytesPerSector& * SectorsPerCluster&
End If
Tell me if it is ok for you with all your disks
Thank you
19 mai 2007 à 07:45
i have find problem ,if you C: d: E: volume in format disk use cluster size is 512 or 1024 or 2048 then run this is have error ,if format disk is use 4096 size cluster is ok,my e: volume cluster is 512 (Bytes per sector(offset 0xb) * Sectors per cluster (offset 0xd) =512)so is have error.
please see picture:
http://img69.imageshack.us/my.php?image=45401047zy9.jpg
18 mai 2007 à 10:35
You disk E is a USB key ? not is USB key
for disks C and D you have f600 at offset 64 and for disk E you have 0200 at the same offset
please see
My C: http://img501.imageshack.us/my.php?image=mycto7.jpg
My E: http://img501.imageshack.us/my.php?image=myedp7.jpg
use ntfsinfo.exe see my E: is
/////////////////////////////////////////////
NTFS Information Dump V1.01
Copyright (C) 1997 Mark Russinovich
http://www.sysinternals.com
Volume Size
-----------
Volume size : 18201 MB
Total sectors : 37277225
Total clusters : 37277225
Free clusters : 804572
Free space : 392 MB (2% of drive)
Allocation Size
----------------
Bytes per sector : 512
Bytes per cluster : 512
Bytes per MFT record : 1024
Clusters per MFT record: 2
MFT Information
---------------
MFT size : 127 MB (0% of drive)
MFT start cluster : 6291456
MFT zone clusters : 5065088 - 5417568
MFT zone size : 172 MB (0% of drive)
MFT mirror start : 18783010
Meta-Data files
---------------
////////////////////////////////////////////
I is think say in my C: and D: MFT->BPB offset 0x0040 (Clusters per MFT Record ) is 0xF6 but in my E: ->BPB offset 0x0040 (Clusters per MFT Record ) is 0x02 so in
/////////////////////////////////
............
nsector = CCur(CCur(debmft) * CCur(SectorsPerCluster&))
(nsector =6291454 )
Exploremftrunlist
............
Public Sub Exploremftrunlist()
DirectReadWrite nsector, CLng(tailleenreg%), 0
(CLng(tailleenreg%)=2 dskerr =TRUE have show this "Erreur accès disque en lecture" error!)
If dskerr = True Then
(show this )
MsgBox "Erreur accès disque en lecture", vbCritical
Exit Sub
End If
////////////////////////////////////////////////
thank you again
18 mai 2007 à 07:29
Good morning
You disk E is a USB key ?
I have understood the problem : for disks C and D you have f600 at offset 64 and for disk E you have 0200 at the same offset. I see this problem this week-end
Thank you
18 mai 2007 à 05:28
Public Sub Exploremftrunlist()
DirectReadWrite nsector, CLng(tailleenreg%), 0
( my E volume nsector=6291454 CLng(tailleenreg%)=2
why tailleenreg is 2!)
If dskerr = True Then
(show this )
MsgBox "Erreur accès disque en lecture", vbCritical
Exit Sub
End If
////////////////////////////////////////////////
click E volume i have see in NTFS From
Private Sub Form_Load()
{
......
func& = GetDiskFreeSpace(lecteur$, SectorsPerCluster&, BytesPerSector&, Freeclusters&, Totalclusters&)
(SectorsPerCluster is = 1)
.........
DirectReadWrite nsector, BytesPerSector&, 0
(this offset 512 is OK )
........
TotalSectors = 37277255
TotalSectorsdisque = 37277255
HiddenSectors = 40965750
debmft = 6291456
debmftmir = 18783010
tailleenreg = 2 (why is 2 !!)
If tailleenreg% > 127 Then tailleenreg% = 2 ^ (256 - tailleenreg%)
(tailleenreg =1024)
tailleindex% = 2
nsector = 6291456
in Exploremftrunlist ()
{
DirectReadWrite nsector, CLng(tailleenreg%), 0 (this is show error !!)
......
}
in first DriectRW
readoctet is
C: volume
.....
0x30 0000 0c00 0000 0000 b388 1300 0000 0000
0x40 f600 0000 0100 0000 e7a2 ea6c c1ea 6c8e
d: volue
0x40 f600 0x40 is readoctet(64)
c: and d: is f600
but in E: 0x40 is 0200 so show error
why in E: readoctet(64)=0200 ??
1 mai 2007 à 02:49
En tout cas bravo, on découvre des choses ^^
9 avril 2007 à 20:52
"affsector = Val(Right$(chn$), Len(chn$ - 20))"
doit être changé je pense en
"affsector = Val(Right$(chn$, Len(chn$) - 20))"
@+
24 mars 2007 à 23:25
18 janv. 2007 à 01:25
bonne prog à tous
18 janv. 2007 à 01:17
18 janv. 2007 à 01:04
A+
Exploreur
10 déc. 2006 à 18:10
Toi tu as besoin d'un tableau de bytes et il serait plus long de l'obtenir à partir d'une string.
Moi j'ai besoin d'une string, et il serait plus long de l'obtenir par concaténations des valeurs d'un tableau de bytes.
Cà servira peut être à quelqu'un d'autre ;)
@+
10 déc. 2006 à 17:40
Mais je vais laisser ma procédure avec un tableau de bytes car ensuite j'utilise les valeurs numériques directement de ces mêmes bytes alors qu'avec la chaine en string il faut faire val(mid$(sbufferOut,position&,1)) pour avoir la valeur en numérique d'un octet à l'offset position& dans la chaine
Corrige moi si je me trompe
De plus cela demanderait une trop importante refonte du programme pour gagner un peu de temps machine
A+ et merci et bonne prog
10 déc. 2006 à 14:32
Alors j'ai codé çà, c'est beaucoup mieux niveau vitesse (j'égale presque WinHex)
Cà te servira peut être ?
Le principe est tout simplement d'obtenir directement une string à partir du disque (et non plus un tableau de bytes).
En lisant 10000 secteurs en un coup (soient 5,12 Mo), çà roule nickel.
'-------------------------------------------------------
'permet de lire des bytes directement dans le disque
'sortie en String
'-------------------------------------------------------
Public Sub DirectReadS(ByVal sDrive As String, ByVal iStartSec As Currency, ByVal nBytes As Long, ByVal lBytesPerSector As Long, ByRef sBufferOut As String)
'/!\ iStartSec et nBytes doivent être multiples de la taille d'un secteur (512 généralement)
Dim BytesRead As Long
Dim Pointeur As Currency
Dim Ret As Long
Dim hDevice As Long
Dim lLowPart As Long, lHighPart As Long
On Error GoTo dskerror
'obtient un path valide pour l'API CreateFIle si nécessaire
'rajoute "\\." si nécessaire
If Len(sDrive) <> 6 Then sDrive = BuildDrive(sDrive)
'ouvre le drive
hDevice = CreateFile(sDrive, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)
'quitte si le handle n'est pas valide
If hDevice = INVALID_HANDLE_VALUE Then Exit Sub
'détermine le byte de départ du secteur
Pointeur = CCur(iStartSec) * CCur(lBytesPerSector)
'transforme un currency en 2 long pour une structure LARGE_INTEGER
'Pointeur est un Currency, lLowPart et lHighPart sont les 2 résultats de la procédure GetLargeInteger (passage par adresse)
GetLargeInteger Pointeur, lLowPart, lHighPart
'déplace, dans le fichier (ici un disque) pointé par hDevice, le "curseur" au premier
'byte que l'on veut lire (donné par deux long)
Ret SetFilePointer(hDevice, lLowPart, lHighPart, FILE_BEGIN) 'FILE_BEGIN> part du début du fichier pour décompter la DistanceToMove
If Ret = -1 Then GoTo dskerror 'API failed
'création d'un buffer de nBytes
sBufferOut = Space$(nBytes)
'obtention de la string sBufferOut
Ret = ReadFile(hDevice, ByVal sBufferOut, nBytes, BytesRead, 0&)
dskerror:
'ferme le handle (arrive ici même si aps d'erreur)
CloseHandle hDevice
End Sub
@+
3 déc. 2006 à 22:57
19 nov. 2006 à 23:41
Mais bu que çà bugue avec les disquettes, je vais revoir çà.
Merci, @+
19 nov. 2006 à 22:20
Pour ta classe tout m'a l'air Ok mais qu'est-ce que l'offset de départ pour toi : est-ce le premier secteur de la partition dans le cas où plusieurs partitions sont stockées sur le même disque dur physique ( cela renvoie un negatif pour les disquettes)
A part cela tu as mis en commentaire Renvoie le liste des drives physiques de 0 à Ubound -1 : ce sont les disques logiques mais cela n'est pas grave
sinon très beau travail
Pour le listmft.textmatrix vu que cette liste n'est remplie qu'une fois cela n'est pas très grave mais j'ai fait la modification et le gain de temps est appréciable
Merci bien et A+
19 nov. 2006 à 21:53
1) Pour Listmft.TextMatrix ==> c'est tout simple ; au mieux de faire :
MSFlexGrid1.Row = 2
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "text"
on peut faire :
MSFlexGrid1.TextMatrix(2, 2) = "text"
Les deux méthodes provoquent le même résultat, mais la seconde est plus rapide.
2) Pour ValidateRect ==> je ne sais pas si c'est une optimisation possible dans ton code, mais cela augmente la vitesse de remplissage d'une Listbox.
exemple ici : http://www.vbfrance.com/codes/ACCELERATION-VITESSE-AFFICHAGE-GELANT-RAFRAICHISSEMENT-CONTROLE_5427.aspx
Mais je ne sais pas si c'est utile dans ta source.
@+, bonne prog.
19 nov. 2006 à 21:00
J'ai corrigé pour espace total : j'avais oublié le paramètre Sectorspercluster& et pour une disquette il est égal à 1 ce qui moi n'engendrait pas d'erreur vu que je testais avec une disquette
1) il y a divers bugs dans certaines form ==> essaie de compiler ton programme, VB t'alertera sur les lignes qui posent problème (majoritairement des controles qui n'existent plus et qui sont appelés, exemple : Fatfrm.lchemin.Clear): cela est réglé
> utiliser Listmft.TextMatrix pour remplir Listmft, plutôt que de changer Col et Row et de faire Listmft.Text=... (gain de temps énorme aussi): peux-tu m'en dire plus ( je ne connais pas)
De même, il est possible de locker l'affichage des List/ListViews avec les APIs ValidateRect et InValidateRect.Là non plus je ne connais pas
concernant ta classe sur les infos de partitions elle est très bien faite : vu qu'elle est faite avec les Api Windows elle va me permettre de vérifier mes infos partitions faites avec la lecture directe dans les secteurs
Merci pour tout
19 nov. 2006 à 19:28
1) il y a divers bugs dans certaines form ==> essaie de compiler ton programme, VB t'alertera sur les lignes qui posent problème (majoritairement des controles qui n'existent plus et qui sont appelés, exemple : Fatfrm.lchemin.Clear)
2) tu peux diviser par 2 ou 3 le temps d'exécution de la procedure Exploremftrunlist (qui prend 3 minutes pour un disque dur de 200 Go dans l'état actuel).
Il suffit de
> locker le rafraichissement du controle Listmft en faisant :
Listmft.Redraw = False (en début de Sub)
Listmft.Redraw = True (en fin de Sub)
Comme ceci, les changements effectués dans le tableau (.Text=...) ne seront pas rafraichis au moment de leur création ; donc gain de temps considérable
> utiliser Listmft.TextMatrix pour remplir Listmft, plutôt que de changer Col et Row et de faire Listmft.Text=... (gain de temps énorme aussi)
De même, il est possible de locker l'affichage des List/ListViews avec les APIs VaidateRect et InValidateRect.
@+
19 nov. 2006 à 18:52
tu mets
totalspace = CCur(CCur(BytesPerSector&) * CCur(Totalclusters))
c'est plutôt :
totalspace = CCur(CCur(BytesPerSector&) * CCur(Totalsectors))
Mais dans ce cas, le résultat donné sera celui d'avant (taille totale réelle, mais pas effective).
Utilise :
CCur(CCur(BytesPerSector) * CCur(SectorPerCluster) * CCur(TotalClusters)) pour avoir le résultat de Windows.
La différence correspond à 17 clusters sur ma clé USB.
@+
19 nov. 2006 à 18:44
Et pour répondre à la question, non, ce n'est pas résolu chez moi.
La taille donnée est de environ 32Mo pour une clé de 1Go (donc c'est faux).
Concernant le problème en lui même, il semble que la taille REELLE totale soit effectivement celle que tu donnais avant (à savoir Nmbre de secteurs * BytesPerSector).
Cela étant, il est préférable d'utiliser la véritable taille donnée par Windows pour le calcul de l'espace disque restant/utilisé/pourcentage.
@+
19 nov. 2006 à 18:36
Qu'en est-il pour toi
19 nov. 2006 à 18:24
@+
19 nov. 2006 à 18:19
Pour la taille totale j'ai fait la correction
Vérifie si cela est correct : pour moi cela l'est
Merci et à plus
19 nov. 2006 à 18:19
Pour la taille du disque, il y a en fait deux tailles différentes : celle donnée par Windows et celle que tu obtiens.
Regarde ici :
http://www.vbfrance.com/code.aspx?ID=40383
la différence est le StartingOffset.
Donc si l'on veut compter la taille "libre" ou "utilisée" sur le disque mieux vaut prendre la taille donnée par Windows, ou sinon on prend la taille que tu trouves.
@+
19 nov. 2006 à 17:54
- Ton prog. me donne 2 à 62895 en précisant que les clusters 0 et 1 sont réservés, ce qui fait 62896 clusters, alors que j'ai 62894 clusters.Il faut lire Numéros (N°) des clusters utilisables et non nombre de clusters utilisables.tu as bien 62894 clusters utilisables (62895 - 2 + 1) et ces clusters vont du numéro 2 au numéro 62896
- Pour la taille totale je regarde
Merci pour ta participation active et à tout à l'heure
19 nov. 2006 à 12:23
@+
19 nov. 2006 à 12:10
Problème : mes infos ne concordent pas avec les tiennes, et WinHex (éditeur disque professionnel) me donne raison (pour la FAT que j'ai testée).
Les infos susceptibles d'être fausses sont (de celles que j'obtiens pour l'instant):
-N° des clusters utilisables : ton prog. me donne 2 à 62895 en précisant que les clusters 0 et 1 sont réservés, ce qui fait 62896 clusters, alors que j'ai 62894 clusters.
Le problème est ici je pene (ligne 2382 de fatfrm): Param.AddItem "N° des clusters utilisables : de 2 à" + Str$(Totalclusters& + 1) ==> il faut mettre (Totalclusters& - 1) à la fin.
-taille totale : la valeur donnée est différente de celle que je trouve (et qui est donnée par Windows). Par contre, je n'ai pas regardé en détail comment est obtenue cette info et donc d'où vient cette erreur.
Je te préviens si je trouve d'autres info différentes que ton programme quand j'aurais codé le reste de ma classe.
@+
17 nov. 2006 à 18:58
@+
16 nov. 2006 à 23:50
9 nov. 2006 à 23:36
Ce n'est pas un bug mais il faut suivre les recommandations de Microsoft trouvées sur MSDN
1° Le nombre d'octets lus ou écrits doit être un multiple de la taille d'un secteur du disque
2° L'offset du premier octet lu ou écrit doit être un multiple de la taille d'un secteur .Divise 536870912 par 512 et tu auras 1048576 donc 2 ^ 29 est un multiple de 512 et là ReadfileEx fonctionne. Si tu prends 10 ^ 8 soit 100000000 / 512 cela donne 19531,25 et 100000000 n'est pas un multiple de 512 donc ReadfileEx plante)
voila les explications
A+
9 nov. 2006 à 23:12
C'est un bug inconnu.Tu as des disques durs NTFS de 200 Go.Sélectionne le disque dur physique 0 ou 1 ; Dans la fenêtre qui s'affiche tu peux lire le nombre de secteurs de ton disque dur physique.Dans la zone de texte verte en bas à gauche rentre le numéro de secteur du dernier secteur physique de ton disque dur ( de 0 à XXXXXXXXXX). C'est le XXXXXXXXXX.Dis moi si tu affiches le secteur en héxadécimal.La valeur max d'offset pour l'octet à afficher est sur 64 bits ( les 2 valeurs 32 bits de overlapped)
J'attends ta réponse
a+
9 nov. 2006 à 20:59
J'ai un problème avec la procédure DirectReadWrite (en mode Read). Il semble, que pour des valeurs élevées de l'offset, elle ne puisse plus assurer son rôle (ReadFileEx renvoie 0).
Exemple avec istartsec = 10^8, ReadFileEx échoue.
Cependant, pour 2^29 (qui est bien sur >10^8) , ReadDileEx réussi.
Est-ce un bug connu ??
@+
8 nov. 2006 à 23:19
6 nov. 2006 à 18:26
En tout cas je le redis, super source !
@+, et bonne prog :)
6 nov. 2006 à 08:03
C'est bien cela à part 3 petits points
1° On lit n bytes et n est un multiple de la taille d'un secteur disque (je n'ai pas testé avec des valeurs différentes)
2° La petite gymnastique avec SetFilePointerEx : l'offset du secteur par rapport au début du disque ou de la partition tient sur une valeur 64 bits. VB6 gère les 32 bits signés. On décompose la variable pointeur de type Currency en 2 valeurs 32 bits signées qui se retrouveront dans la structure Overlapped pour lire ou écrire le secteur pointé
3° En lecture on prépare un tableau de bytes que la procédure remplit en lisant les octets sur le disque et en écriture le tableau contient déjà les bytes à écrire sur le disque.
Merci pour tes appréciations et bonne prog pour ton super éditeur héxadécimal
A++
5 nov. 2006 à 18:58
Je cherchais une source qui illustrait l'utilisation des APIs permettant d'accéder directement au disque, ben là je suis servi !
La procédure DirectReadWrite est pile ce que je cherchais.
Donc si je résume de manière énorme ; (en mode lecture)
-on obtient le handle vers le disque avec CreateFile
-on lit n bytes avec ReadFile
-la méthode est analogue avec l'API ReadProcessMemory.
C'est bien cela ? J'avoue que je suis un peu perdu devant tant de lignes de code.
Projet remarquable, en tout cas.
@+
10 oct. 2006 à 15:22
13 juil. 2006 à 12:44
Pour la refonte en MDI et l'accés aux infos par menu cela demanderait une refonte complète du projet surtout au niveau des 3 feuilles principales : Fatfrm,Ntfsfrm et Cdromfrm
Le projet était à l'origine une étude du système de fichier FAT une fois que les procédures d'accès direct en lecture et écriture sur disque furent opérationnelles.Ensuite le NTFS (demandé par les visiteurs de ce projet) et le CDFS furent les suites logiques de ce projet.
un grand merci pour les commentaires encourageants et bonnes vacances à tous
13 juil. 2006 à 10:56
pourrait on faire en sorte d'analyser une structure ISO contenue dans un fichier sous forme d'image?
13 juil. 2006 à 10:53
c'est vraiment du beau boulot et je me demandais justement si un tel acces direct etait possible en VB : j'ai eu ma réponse.
le seul probleme que j'ai trouvé est qu'il faut un écran sacrément balais pour pouvoir utiliser le soft. j'ai un 14 pouces et je ne peut pas tout afficher (d'origine)
ne serait ce pas plus ergonomique de faire une refonte en MDI, avec l'accès aux infos par menus?
merci en tout cas, très pédagogique!
3 juil. 2006 à 11:24
28 juin 2006 à 18:37
Bonne continuation
28 juin 2006 à 17:52
Travaillant actuellement, sur un projet qui utilise aussi cette maniere pour lire directement le disque dur (j'ai beaucoup apris avec ton code), je viens de remarquer ce qui me semble etre une légere erreure :
La table des partitions devrait commencer a l'offset 446 (ou 1BE en hexa). Or quand j'explore la table des partitions avec ton programme, je constate qu'elle commence a l'offset 448 (ou 1C0).
Je ne sais pas si c'est moi qui me trompe ou si ton programme présente une erreur.
PS : Cela arrive quand j'explore les partitions FAT32 et que je clique sur "secteur de boot" dans le menu du haut.
22 mai 2006 à 23:52
6 avril 2006 à 13:07
Inutile de dire que mon projet est définitivement abandonné. Il serait vraiment dommage que votre réalisation soit méconnue et je vous encourage vivement à l'améliorer.
A ce sujet, un petit bug: la FAT16 des disques durs n'est pas reconnue et traitée comme une FAT12 ce qui provoque une erreur d'exécution. Il faudrait quelque chose comme:
IF FSName$="FAT" AND car$ > "B:" THEN FSname$="FAT16" else FSname$="FAT12"
Apparemment les clefs USB ne sont pas reconnues mais c'est surtout l'interface utilisateur qui mériterait, à mon sens, d'être aménagée.
Connaissant très bien, et pour cause, son projet, l'auteur ne réalise pas toujours combien celle ci peut être déroutante de prime abord.
Ainsi, il y a certaines redondances dans l'affichage des numéros de secteurs et de clusters et l'absence de menus déroulant nécessite une taille d'écran importante. Il faut aussi se livrer à un petit calcul pour afficher une FAT. Manque aussi certaines fonctions dont l'implantation ne devrait pas poser de problèmes. Tout cela n'est pas bien grave sans doute mais en publiant la source de votre projet, vous courrez le risque de le voir "bidouillé" par certains, voire carrément accaparé. Ce qui serait vraiment regrettable.
Encore une fois: félicitations et merci.
5 avril 2006 à 23:04
Cette source est un gros programme qui explore la structure des disques durs, disquettes et CDROM et s'adresse à des personnes ayant des connaissances suffisantes au niveau des systèmes de fichiers. Rien par contre ne t'empêche d'apprendre et de comprendre ensuite : même moi parfois je remets en question mes connaissances dans ce domaine et en apprends encore. Quant à ton petit module comme tu dis tu penses sûrement à un éditeur héxa-Ascii.Cela se trouve facilement sur le site ou sur le Net. Merci pour ton appréciation et A +
Galain
27 mars 2006 à 21:57
la source est bien mais je ne comprend pas grand chose... y aurait-il un module ou un bout de code quelque part qui permette la lecture/ecriture sur un disque facilement (style un éditeur comme bloc note :p) voila merci
21 févr. 2006 à 07:24
Je constate que tu es un fervent supporter de cette source
J'ai entendu parler de ext2/ext3 mais je ne connais point
Qui sait ? Peut-être un nouveau créneau à explorer ?
Merci et A+
20 févr. 2006 à 13:16
13 févr. 2006 à 20:56
Merci et A+
13 févr. 2006 à 10:30
4 févr. 2006 à 16:50
Une petite erreur s'est glissée dans la feuille Cdromfrm : le fonction CdromDvdStructure nous donne par calcul le dernier secteur lisible de la dernière session et non pas de la première session
Désolé et bonne prog à tous
30 janv. 2006 à 07:52
Merci de ta compréhension.
Autre erreur de compile désormais : GetTOC indéfini dans AudioFrm_Load
J'ai simplement recompilé pas retesté. Pas le temps pour l'instant..
A+
28 janv. 2006 à 14:24
1° J'ai réglé les problèmes de compilation et j'ai testé : aucun problème signalé
2° "Si on attends pas que la fenêtre d'attente se termine cela plante" : Dans ce cas le programme doit se mélanger les pinceaux et des informations nécessaires à l'évènement en cours n'ont pas encore été traitées dans l'événement précédent
j'ai mis des routines
for each control in me
control.enabled = true et puis false
next
au endroit qui me paraissent critiques au niveau événementiel
L'idéal est d'attendre le fin de l'attente si on peut dire
3) Pour les autres plantages aléatoires je ne vois pas : je vais retester les modules NTFS pour chercher les cas particuliers de plantage
Rassures-toi je prends tes critiques dans le bon sens et c'est souvent avec des critiques que l'on avance
A+ et bonne prog
27 janv. 2006 à 09:43
27 janv. 2006 à 09:34
Hey un peu de respect pour les vendredi matins Yoman64...
lol
27 janv. 2006 à 08:31
apprend a lire jeune padawan ;)
27 janv. 2006 à 07:52
Au niveau des plantages : si on attends pas que la fenêtre d'attente se termine pour cliquer quelque part ça plante... lorsque je clique sur détail des enregistrements MFT ça plante de temps en temps, y a d'autres menu où les plantages sont alléatoires.
Je pense que ça vient de la gestion événementielle qui fait que l'appli se mélange les pinceaux de temps à autres.
Mais je te rassure si on passiante suffisemment ça fonctionne bien.
(Sauf pour la compilation... j'ai mis en commentaire la procedure...)
Vu la quantité d'infos ramenées pas étonnant que ça prenne du temps... Peut-être qu'avec une lecture partielle en fonction de l'affichage accélèrerait les traitements... ?
Déja vu le niveau de l'appli c'est de l'excellent travail !
26 janv. 2006 à 21:27
- La compilation ne plante plus sur "Lecturetoc" dans la mise à jour
- Pour la lenteur cela est vrai que certaines routines ne sont nullement optimisées mais VB y est à mon avis aussi pour quelque chose
- Peux-tu m'en dire plus au niveau des plantages ?
- Pour l'adaptation en .net le problème est que je n'ai point VB Net
Mon souci actuel est que les résultats au niveau de la TOC des DVDROM ne me parait pas conforme par rapport aux logiciels professionnels (Isobutser entre autres). Je cherche la solution
26 janv. 2006 à 09:43
Je viens de décourvrir ce source
J'ai mis 9
Fabuleux, on apprend plein de truc
J'ai juste enlevé un pour les plantages et la compilation qui plante sur "Lecturetoc" et la lenteur
Sinon ben chapeau
Une adaptation en .net est-elle envisageable ?
22 janv. 2006 à 16:24
17 janv. 2006 à 00:34
16 janv. 2006 à 11:01
16 janv. 2006 à 11:00
16 janv. 2006 à 08:47
8 janv. 2006 à 02:00
Et merci aussi aux admins pour leur aide et leur disponibilité
Et vive VBFrance
20 déc. 2005 à 11:43
Et vive VbFrance
19 déc. 2005 à 21:07
Bravo !!
Et bon courage pour la suite !! !
10/10
8 nov. 2005 à 07:32
Ceux qui désirent trouver des infos sur le système NTFS peuvent visiter ce site (en anglais malheureusement)
http://linux-ntfs.sourceforge.net/ntfs/index.html
J'ai commencé à écrire ce projet pour les systèmes FAT dont je connaissais très bien l'architecture.
On m'a demandé de faire de même pour NTFS et c'est en apprenant,en fouillant sur le NET et en passant beaucoup de temps que j'ai découvert NTFS et ce n'est pas fini.
Quand on sait que ce projet a plus d'un an et demi d'existence on se rend compte de l'investissement qu'il a nécessité.
Le troisième volet de ce projet concerne les CDROM et DVDROM avec les systèmes CDFS et UDF .
Sur ce bonne prog à tous et A+
Galain
7 nov. 2005 à 17:14
je voulais juste suivre les évolutions...
Comment être informé des nouveaux messages sans pour autant en laisser un ?
Mais bon, puisque je suis là...
Galain : où peut-on trouver des info concernant le fonctionnement bas-niveau de NTFS ?
Merci d'avance
7 nov. 2005 à 17:11
22 sept. 2005 à 23:02
Directrw ne fonctionne pour l'instant uniquement avec des lecteurs locaux : ne modifier pas le code de la feuille d'introduction pour gérer les lecteurs réseau car les différentes Apis d'accés au lecteur ne fonctionnent plus correctement
Je vais essayer de voir le problème pour autoriser les lecteurs réseau
galain
22 sept. 2005 à 06:58
Pour Econs je t'ai envoyé un message perso concernant le bug que tu as subi
Dis-moi ce qu'il en est suite à la correction
Merci
21 sept. 2005 à 13:17
Indice en dehors de la plage sur la ligne ci dessous (Tablemftfrm)
Private Sub Form_Load()
Initable
Quitter.Enabled = True
Table.Enabled = False
Listatt.Clear
For j% = 0 To UBound(Listattr$()) ' <-- erreur ici
Listatt.AddItem Listattr$(j%)
Next j%
Me.Caption = "Tableau des enregistrements de la MFT du lecteur " + lecteur$
End Sub
Ce que j'ai fait :
- j'ai cliqué sur un lecteur, il m'a affiché une belle fenêtre pleine de couleurs avec les caractéristiques de mon disque.
Puis j'ai cliqué sur le menu 'Tableau de la MFT'... Et là, patatra !
A part çà, très bonne source !!
4 sept. 2005 à 00:51
J'ai vu que quelqu'un a mis 1 comme note : je m'en fous mais il aurait pu laisser un commentaire pour expliquer cette note à moins qu'il sache faire mieux dans le même genre de source ( auquel cas je suis preneur !!!)
A bon entendeur salut
Galain
8 juil. 2005 à 01:04
Pour répondre à THE_BEST et pour rassurer les autres.
Cela fait presque 3 semaines que la purge des clusters libres en NTFS fonctionne chez moi sans aucun problème.
Je ne vais tout de même pas vous proposer des fonctions qui risqueraient d'endommager une partition : cela fait plus de 5 mois que cette dernière fonction est en chantier et a été testée sous toutes les coutures par mes soins.
Mais personne n'est à l'abri d'un bug n'est-ce pas ? C'est la raison pour laquelle j'ai mis cet avertissement.
Bonne prog à tous
7 juil. 2005 à 13:06
7 juil. 2005 à 12:22
Quelques petits bugs corrigés
La purge des clusters libres en NTFS est opérationnelle
Testez cette dernière fonction sur une partition de test et rapportez moi les bugs s'il y en a
Sur mon système cette fonction ne me pose aucun problème quelque soit la partition ( même bootable)
Je préfère vous prevenir ( on ne sait jamais)
Bonne prog et A+
4 juil. 2005 à 17:17
4 juil. 2005 à 16:20