Autor Thema: CommFS?  (Gelesen 16491 mal)

T0ast3r

  • Gast
Gespeichert
« Antwort #40 am: 12. May 2005, 14:34 »
@Roshl: Entweder es steht da gleich FAT12 dort, oder NIX.
Im FAT Tutorial steht in so einem eintrag, dass der Angibt, ob die 3 folgenden Einträge vorhanden sind.
ALSO STEHT DA ENTWEDER FAT12 ODER WAS ANDERES!!!  :evil:

T0ast3r

  • Gast
Gespeichert
« Antwort #41 am: 12. May 2005, 14:40 »
Das mit den Clustern steht ja eh dort, aber trotzdem.,

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #42 am: 12. May 2005, 14:40 »
Dann lies dir mal Microsofts Original genau durch, da steht ausdrücklich, dass FAT12/16/32 ausschliesslich anhand der Clusterzahl unterschieden werden kann und nicht weil dort ein String steht der FAT12, FAT16 oder FAT lautet.
Tut mir Leid aber es ist einfach so.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #43 am: 12. May 2005, 14:41 »
Ja Roshl hat recht ;-)

T0ast3r

  • Gast
Gespeichert
« Antwort #44 am: 12. May 2005, 14:43 »
Ja OK kapiert, aber wo sollte FAT stehen?

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #45 am: 12. May 2005, 14:47 »
Jeweils die letzten 8 Byte im Header geben den Filesystype an. Der Offset unterscheidet sich aber, bei FAT12/16 ist er gleich FAT32 weiter hinten. Genauen Bytezahlen hab ich auch nicht im Kopf.
Microsoft hat da echt Mist gemacht, es gibt eigentlich gar nichts woran man sicher erkennt, dass das ein FAT-System ist^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

T0ast3r

  • Gast
Gespeichert
« Antwort #46 am: 12. May 2005, 14:52 »
OK ds OFFSET steht eh im FAT12 TUtorial von TJ.
Das vom FAT32 such ich mir eh raus..

T0ast3r

  • Gast
Gespeichert
« Antwort #47 am: 16. May 2005, 15:22 »
Also ich hab mir nun einen Code einfallen lassen, der überprüft, ob das laufwerk FAT formatiert ist und wenn ja dann wie.
Schreibt mir was s dann übern code zu meckern gibt.


CheckFS: ; Die Funktion um das FS zu überprüfen

; Parameter: DL = Laufwerk

call ReadBootSector ; lese den BootSector

cmp [BootSector + 54], „F” ; Ist 1. Buchstabe vom Eintrag FileSysType ein „F“ ?
jne Ende ; wenn nein, dann kein FAT

cmp [BootSector + 55], „A” ; Ist 2. Buchstabe vom Eintrag FileSysType ein „A“ ?
jne Ende ; wenn nein, dann kein FAT

cmp [BootSector + 56], „T” ; Ist 3. Buchstabe vom Eintrag FileSysType ein „T“ ?
jne Ende ; wenn nein, dann kein FAT

call FAT ; welches FAT ?

Ende:

ret


ReadBootSector: ; Funktion um den Boot Sektor zu laden

; Parameter: DL = Laufwerk (übernommen aus CheckFS)

mov AH, 02h ; Funktionsnummer: 02h
mov AL, 1 ; lese einen Sektor
xor CH, CH ; Cylinder = 0
mov CL, 1 ; Sektor = 1
xor DH, DH ; Head = 0
mov BX, Offset BootSector ; Adesse des Puffers nach BX
Int 13h ; lese nun den BootSector!!!!

ret


FAT: ; Funktion um FAT12 + FAT16 zu erkennen

mov CX, [BootSector + 19] ; TotSec nach AX
sub CX, [BootSector + 14] ; TotSec - ResvdSecCnt

xor DX, DX ; DX = 0 (wichtig für Word Multiplikation)
xor AH, AH ; AH = 0 (wichtig für Word Multiplikation)
mov AL, [BootSector + 16] ; AL = NumFATs => AX = NumFATs
mul word ptr [BootSector + 22] ; NumFATs * FATSize

sub CX, AX ; (TotSec – ResvdSecCnt) – (NumFATs* FATSize)

xor DX, DX ; DX = 0 (wichtig für Word Multiplikation)
mov AX, [BootSector + 17] ; RootEntCnt nach AX
mul word ptr 32 ; RootEntCnt * 32
xor DX, DX ; DX = 0 (wichtig für Word Division)
div 512 ; (RootEntCnt) / 512 = RootDirSectors

sub CX, AX ; TotSec – ResvdSecCnt – NumFATs* FATSize - RootDirSectors

ret


AssignClusterToFAT: ; Funktion, welche den Laufwerken die FAT Version zuweist

; Parameter: CX = Cluster

cmp CX, 4085d ; FAT12 ?
jnl FAT16 ; wenn nein, dann springe zur FAT16 Überprüfung

; [...] Some Code

jmp End

FAT16:
cmp CX, 65525d ; FAT16 ?
jnl FAT32 ; wenn nein, dann ist es FAT32

; [...] Some Code

jmp End

FAT32

; […] Some Code

End:

ret


BootSector db 512 dup (0)



Im Code hab ich mehr auf verständlichkeit wert gelegt, als auf Performace
*hinweis*

 

Einloggen