ACCES DIRECT DISQUE

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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.

https://codes-sources.commentcamarche.net/source/32480-acces-direct-disque

Profil bloqué
12 juin 2007 à 22:02
Salut à tous
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
Profil bloqué
21 mai 2007 à 23:48
Thank you AMMNR
I am happy for you
Good bye
ammnr Messages postés 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 20 mai 2007
20 mai 2007 à 12:33
hi Galain:

i have see you new version ,it is OK Good thank you again .
Profil bloqué
20 mai 2007 à 02:44
for AMMNR
You can download the new version of this code
I have updated for your problem
Thank you
Profil bloqué
19 mai 2007 à 17:14
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és 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 20 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és 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 20 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

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
Profil bloqué
18 mai 2007 à 07:29
For AMMNR

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
ammnr Messages postés 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 20 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()
{
......

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 ??
fc_pute Messages postés 6 Date d'inscription jeudi 2 novembre 2000 Statut Membre Derniè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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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))"

@+
Profil bloqué
24 mars 2007 à 23:25
Pour info le défragmenteur a été supprimé du projet : voir la source de ShareVB pour ceux que ce sujet intéresse.
Profil bloqué
18 janv. 2007 à 01:25
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
Profil bloqué
18 janv. 2007 à 01:17
Merci Exploreur
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
18 janv. 2007 à 01:04
Félicitations pour le suivi de ta source...
A+
Exploreur
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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.

Cà servira peut être à quelqu'un d'autre ;)
@+
Profil bloqué
10 déc. 2006 à 17:40
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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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




@+
Profil bloqué
3 déc. 2006 à 22:57
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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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, @+
Profil bloqué
19 nov. 2006 à 22:20
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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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.

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.
Profil bloqué
19 nov. 2006 à 21:00
Salut Violent_Ken

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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 18:52
Re,
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.

@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 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.

@+
Profil bloqué
19 nov. 2006 à 18:36
Ne vas pas trop vite : je viens de mettre la correction en ligne et pour moi cela correspond à Windows
Qu'en est-il pour toi
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 18:24
Hum, chez moi, la taille (en tout cas pour une partition FAT) est toujours la même, à savoir pas celle donnée par Windows.

@+
Profil bloqué
19 nov. 2006 à 18:19
Salut Violent_Ken

Pour la taille totale j'ai fait la correction
Vérifie si cela est correct : pour moi cela l'est
Merci et à plus
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 18:19
En effet, tu as raison.


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.

@+
Profil bloqué
19 nov. 2006 à 17:54
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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 12:23
*différentes de celles données par ton programme

@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
19 nov. 2006 à 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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
17 nov. 2006 à 18:58
Pas grave ^^

@+
Profil bloqué
16 nov. 2006 à 23:50
Désolé pour Violent_Ken car j'ai écorché son pseudo lors de la mise à jour du 16 novembre 2006
Profil bloqué
9 nov. 2006 à 23:36
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)

voila les explications
A+
Profil bloqué
9 nov. 2006 à 23:12
Salut Violent_Ken

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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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.

Est-ce un bug connu ??

@+
Profil bloqué
8 nov. 2006 à 23:19
Dans l'historique du 08/11/2006 il faut lire "J'ai enfin trouvé pourquoi" etc..... Désolé et A+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
6 nov. 2006 à 18:26
Salut, merci pour la précision sur SetFilePointerEx ;)

En tout cas je le redis, super source !

@+, et bonne prog :)
Profil bloqué
6 nov. 2006 à 08:03
Salut Violent_Ken

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és 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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és 129 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 23 mai 2009 1
10 oct. 2006 à 15:22
Vraiment génial.
Profil bloqué
13 juil. 2006 à 12:44
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és 51 Date d'inscription vendredi 20 février 2004 Statut Membre Derniè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és 51 Date d'inscription vendredi 20 février 2004 Statut Membre Derniè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és 4 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 4 juillet 2006
3 juil. 2006 à 11:24
Bravo tu es mon gourou
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 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és 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 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.
Profil bloqué
22 mai 2006 à 23:52
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és 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
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.
Profil bloqué
5 avril 2006 à 23:04
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és 89 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 26 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
Profil bloqué
21 févr. 2006 à 07:24
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és 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
20 févr. 2006 à 13:16
a quand le support ext2/ext3 ? ;)
Profil bloqué
13 févr. 2006 à 20:56
bien sur Yoman64 c'est 2006 !
Merci et A+
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
13 févr. 2006 à 10:30
euh galain tu voulais pas dire 2006 ? :-/
Profil bloqué
4 févr. 2006 à 16:50
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és 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
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..

A+
Profil bloqué
28 janv. 2006 à 14:24
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és 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
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és 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
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és 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Derniè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és 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
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 !
Profil bloqué
26 janv. 2006 à 21:27
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és 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
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

Sinon ben chapeau

Une adaptation en .net est-elle envisageable ?
Profil bloqué
22 janv. 2006 à 16:24
Pour les fichiers ISO Brunews l'a fait en assembleur et moi je l'ai fait en VB. Merci à Brunews pour sa source.
Profil bloqué
17 janv. 2006 à 00:34
Merci à tous pour vos encouragements
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
16 janv. 2006 à 11:01
(enfin ça te permettrait de comprendre le comment du bidule)
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
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és 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Derniè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
Profil bloqué
8 janv. 2006 à 02:00
Un grand merci à Akira et à d'autres pour leurs travaux sur le WMI
Et merci aussi aux admins pour leur aide et leur disponibilité
Et vive VBFrance
Profil bloqué
20 déc. 2005 à 11:43
Merci TFLorian pour les encouragements
Et vive VbFrance
TFlorian Messages postés 194 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 19 décembre 2005 3
19 déc. 2005 à 21:07
Un travail de titan !

Bravo !!
Et bon courage pour la suite !! !
10/10
Profil bloqué
8 nov. 2005 à 07:32
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és 33 Date d'inscription samedi 16 octobre 2004 Statut Membre Derniè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és 33 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 3 août 2007
7 nov. 2005 à 17:11
 Comment être informés des nouveaux messages sans en deposer un ?
Profil bloqué
22 sept. 2005 à 23:02
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

galain
Profil bloqué
22 sept. 2005 à 06:58
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és 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
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 !

A part çà, très bonne source !!
Profil bloqué
4 sept. 2005 à 00:51
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

Galain
Profil bloqué
8 juil. 2005 à 01:04
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és 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Derniè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...
Profil bloqué
7 juil. 2005 à 12:22
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és 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Derniè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és 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 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
Rejoignez-nous