Ich hätte mal ne Frage an alle die sich hier mit dem FAT-Filesystem auskennen.
Im Vorgriff auf eine spätere Treiber-Entwicklung für meinen Kernel arbeite ich gerade an einer Dokumentation über das FAT-Filesystem.
TeeJay hat ja schon ein schönes Tutorial für FAT12 geschrieben. In meinem Doc beziehe ich auch FAT16, FAT32, lange Dateinamen usw. mit ein. Die Doc ist zwar erstmal für meine eigene Entwicklungs-Arbeit gedacht, wenn sie aber fertig ist und Euch auch interessiert stell ich sie natürlich gerne zur Verfügung.
Aber das nur nebenbei.
Nun zu meinem Problem:
Wie man FAT12,16 und 32 unterscheidet ist ja kein Problem und kein Geheimnis. Aber ich versuche gerade eine Strategie zu entwickeln wie man überhaupt erkennt das ein FAT-System auf dem Volume existiert.
Der Kernel der einen neuen Datenträger erkennt muss ja schliesslich wissen ob der FAT-Treiber dafür zuständig ist oder vielleicht ein ganz anderer Treiber, z.B. der NTFS-Treiber oder der BOFS-Treiber, oder welcher auch immer.
Mal davon abgesehen ob es clever ist das diese Erkennung der Kernel macht oder vielleicht irgend eine andere Service-Routiene, bleibt immer noch die Frage: FAT oder nicht FAT.
Meine Strategie wäre folgende:
1. BootSector einlesen
2. prüfen ob an Position 54-56 die Buchstaben "FAT" stehen. (BS_FileSysType)
wenn JA dann FAT erkannt, wenn NEIN dann weiter prüfen
3. prüfen ob an Position 3-10 die Buchstaben "MSWIN4.1" stehen (BS_OEMName)
wenn JA dann FAT erkannt, wenn NEIN dann weiter prüfen
*** bis hier hin sichere Erkennung, ab hier "Indizien-Erkennung" ***
4. indiz=0
5. prüfen ob an Position 11 das Word 200h steht (BPB_BytesPerSec=512)
wenn ja inc(indiz)
6. prüfen ob an Position 16 das Byte 02h steht (BPB_NumFATs)
wenn ja inc(indiz)
7. prüfen ob an Position 21 ein Byte größer/gleich F0h steht (BPB_Media)
wenn ja inc(indiz)
8. prüfen ob an Position 36 der Byte-Wert 00h oder 80h steht (BS_DrvNum)
wenn ja inc(indiz)
9. prüfen ob an Position 38 das Byte 29h steht (BS_BootSig)
wenn ja inc(indiz)
10. wenn indiz größer/gleich 3 ist dann FAT erkannt, wenn nicht dann KEIN FAT FILESYSTEM !
****************
So Leute, das wäre meine Idee. Vielleicht bin ich ja auf dem Holzweg, und ihr habt eine bessere Idee ein FAT-System zu erkennen.

Im Vorgriff auf eine spätere Treiber-Entwicklung für meinen Kernel arbeite ich gerade an einer Dokumentation über das FAT-Filesystem.
TeeJay hat ja schon ein schönes Tutorial für FAT12 geschrieben. In meinem Doc beziehe ich auch FAT16, FAT32, lange Dateinamen usw. mit ein. Die Doc ist zwar erstmal für meine eigene Entwicklungs-Arbeit gedacht, wenn sie aber fertig ist und Euch auch interessiert stell ich sie natürlich gerne zur Verfügung.
Aber das nur nebenbei.
Nun zu meinem Problem:
Wie man FAT12,16 und 32 unterscheidet ist ja kein Problem und kein Geheimnis. Aber ich versuche gerade eine Strategie zu entwickeln wie man überhaupt erkennt das ein FAT-System auf dem Volume existiert.
Der Kernel der einen neuen Datenträger erkennt muss ja schliesslich wissen ob der FAT-Treiber dafür zuständig ist oder vielleicht ein ganz anderer Treiber, z.B. der NTFS-Treiber oder der BOFS-Treiber, oder welcher auch immer.
Mal davon abgesehen ob es clever ist das diese Erkennung der Kernel macht oder vielleicht irgend eine andere Service-Routiene, bleibt immer noch die Frage: FAT oder nicht FAT.
Meine Strategie wäre folgende:
1. BootSector einlesen
2. prüfen ob an Position 54-56 die Buchstaben "FAT" stehen. (BS_FileSysType)
wenn JA dann FAT erkannt, wenn NEIN dann weiter prüfen
3. prüfen ob an Position 3-10 die Buchstaben "MSWIN4.1" stehen (BS_OEMName)
wenn JA dann FAT erkannt, wenn NEIN dann weiter prüfen
*** bis hier hin sichere Erkennung, ab hier "Indizien-Erkennung" ***
4. indiz=0
5. prüfen ob an Position 11 das Word 200h steht (BPB_BytesPerSec=512)
wenn ja inc(indiz)
6. prüfen ob an Position 16 das Byte 02h steht (BPB_NumFATs)
wenn ja inc(indiz)
7. prüfen ob an Position 21 ein Byte größer/gleich F0h steht (BPB_Media)
wenn ja inc(indiz)
8. prüfen ob an Position 36 der Byte-Wert 00h oder 80h steht (BS_DrvNum)
wenn ja inc(indiz)
9. prüfen ob an Position 38 das Byte 29h steht (BS_BootSig)
wenn ja inc(indiz)
10. wenn indiz größer/gleich 3 ist dann FAT erkannt, wenn nicht dann KEIN FAT FILESYSTEM !
****************
So Leute, das wäre meine Idee. Vielleicht bin ich ja auf dem Holzweg, und ihr habt eine bessere Idee ein FAT-System zu erkennen.


Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

?" muss nicht in BS_FileSysType stehen. Aber wenn die ersten drei Zeichen dort "FAT" lauten dann dürfte auch dies ein "sicheres" Zeichen dafür sein das es sich um FAT handelt.