Autor Thema: FAT12-Dateinamen auslesen  (Gelesen 7095 mal)

bscreator

  • Gast
Gespeichert
« am: 06. July 2010, 11:52 »
Hallo,

ich möchte mich ein wenig mit dem FAT12-Dateisystem auseinandersetzen.
Hab bereits ein paar Mal die Ausgabe 4 des LowLevel-Magazins durchgelesen, in dem der komplette Aufbau beschrieben ist. Hab jetzt eine Diskette mit 3 einfachen Dateien, ohne Verzeichnisse, ohne besondere Attribute.

Möchte jetzt ein kleines Assembler-Programm schreiben, mit dem man die Dateinamen auslesen kann.
Laut Ausgabe 4 befindet sich der Dateiname in Offset 0, 11 Bytes Größe (8+3 - Konvention)

Reicht es jetzt, die ersten 11 Bytes der FAT-formatierten Diskette auszulesen, um den Dateinamen der ersten Datei zu bekommen ?

Vielen Dank,
bsc

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 06. July 2010, 11:56 »
Nein!

Auch wenn Wikipedia in Sachen OSDev manchmal sone Sache ist.. :

http://de.wikipedia.org/wiki/File_Allocation_Table

Das wird denke ich mal etwas Licht ins Dunkel bringen. (=> Kleiner Überblick)

PS: Ein FAT12 Image inklusive Hex-Editor bringt auch manchmal ein wenig Erleuchtung ;)
« Letzte Änderung: 06. July 2010, 12:00 von Cjreek »
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 06. July 2010, 19:36 »
Hallo,


Reicht es jetzt, die ersten 11 Bytes der FAT-formatierten Diskette auszulesen, um den Dateinamen der ersten Datei zu bekommen ?
Nein das reicht nicht. Die gültigen Dateieinträge können über das gesamte Verzeichnis verstreut sein, zumindest bis der erste 32 Byte-Eintrag mit 0x00 anfängt. Du musst also immer erstmal ermitteln wie groß das Verzeichnis auf dem Datenträger überhaupt ist (bei FAT12 und FAT16 ist das Stammverzeichnis ja schon im Boot-Sektor exakt beschrieben, bei FAT32 musst Du auch dafür schon eine Cluster-Kette verfolgen). Nachdem Du dann alle Sektoren/Cluster kennst, über die sich ein Verzeichnis zieht, kannst Du diese der Reihe nach einlesen und analysieren. Sobald Du dabei auf einen Eintrag der mit 0x00 anfängt stößt ist Schluss (alles was danach kommt ist ungültig). Nicht jeder Eintrag ist auch benutzt, die unbenutzten sind im ersten Byte mit 0xE5 (glaube ich zumindest, prüfe das vorher Bitte noch mal nach) gekennzeichnet.
Wenn Du auch lange Dateinamen unterstützen möchtest wird es noch mal einen Tick komplizierter, außerdem musst Du dann auf MS aufpassen die haben da irgendwelche Patente drauf. :-D


Grüße
Erik


PS.: Hier http://www.lowlevel.eu/wiki/FAT#Verzeichnis-Eintrag ist z.B. die Beschreibung der erlaubten Zeichen im Dateinamen etwas unglücklich ausgefallen, vielleicht könnte da mal jemand (der Ahnung davon hat) diese schwammige Formulierung gegen eine konkrete Liste mit tatsächlich erlaubten Zeichen austauschen. Das bestimmte Byte für unbenutzte Einträge wäre dort auch eine interessante Info.
Reality is that which, when you stop believing in it, doesn't go away.

bscreator

  • Gast
Gespeichert
« Antwort #3 am: 07. July 2010, 13:57 »
Ich beschränke mich ja nur mal auf die Diskettenversion (FAT12). Da will ich nur ein Programm schreiben, das die Dateinamen der 3 Dateien auf der Diskette ausgibt. Ich bin mir jetzt nicht sicher, ob Du mit Verzeichnis nen Ordner, oder ein Verzeichnis im Dateisystem meinst...

Auf jeden Fall gibt es keinen festen Punkt im Dateisystem, an dem sich spezielle Informationen (bis auf den Bootsektor) wie z.B. die Dateinamen der befindlichen Dateien befinden, da alle Files unterschiedlich gross sind, oder ?

Vielen Dank,
bsc

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 07. July 2010, 14:20 »
Auf jeden Fall gibt es keinen festen Punkt im Dateisystem, an dem sich spezielle Informationen (bis auf den Bootsektor) wie z.B. die Dateinamen der befindlichen Dateien befinden, da alle Files unterschiedlich gross sind, oder ?

Wir haben dir da ein paar Links gegeben. Die solltest du dir vllt. mal anschauen .
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 07. July 2010, 20:25 »
Hallo,


Es gibt bei MS auch irgendwo ne offizielle Spezifikation, die sollte (fast) alle Fragen beantworten.

Da will ich nur ein Programm schreiben, das die Dateinamen der 3 Dateien auf der Diskette ausgibt.
Und wenn auf der Diskette 4 Dateien sind? Oder nur 2?
Bitte versuche Deine Zielstellung etwas genauer zu formulieren. Wenn Du eine immer gleich aufgebaute/vorbereitete Diskette analysieren willst dann kannst Du Dich eventuell auf Deine eigenen Vorgaben verlassen, aber wenn Du ein Programm erstellen willst das jede Diskette mit FAT12 einlesen können soll dann muss Dein Programm ein gewisses Mindestmaß an Flexibilität aufweisen.

Auf jeden Fall gibt es keinen festen Punkt im Dateisystem, an dem sich spezielle Informationen (bis auf den Bootsektor) ....
So ist es.
Könntest Du das fett schrei(b)en Bitte auf die wirklich wichtigen Dinge beschränken?!


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 08. July 2010, 09:29 »
Es gibt bei MS auch irgendwo ne offizielle Spezifikation, die sollte (fast) alle Fragen beantworten.
Letztes Mal als ich nachgeschaut habe, gab's die aber nur unter sehr unpassenden Bedingungen - darf man nur für EFI-Implementierungen verwenden oder sowas. Ob das in Deutschland bindend ist, ist eine andere Frage, aber ich habe mich dann lieber auf andere Quellen verlegt... ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #7 am: 08. July 2010, 10:19 »
Hallo,

da man ja klein anfangen soll, hab ich mich jetzt auf einen statischen Aufbau der Diskette, d.h. immer die selben 3 Dateien, immer dieselbe Größe beschränkt.
Klar will ich später mal alle Dateinamen der Dateien auf einer FAT12-Diskette auslesen, aber das steht noch in den Sternen...

Gruss,
bsc

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 08. July 2010, 10:30 »
Also das reine AUFLISTEN von Dateien auf nem FAT-FS ist jetzt nicht sooo kompliziert.
Man muss sich halt son bisschen mit dem Wikipedia-Artikel beschäftigen (oder mit anderen Artikeln/Spezifikationen) und sich wie gesagt am besten ein FAT-Image mal im Hex-Editor anschauen. Da kann man dann mal mit eigenen Augen überprüfen was man gerade in der Spezifikation gelesen hat und dann merkt man auch ob man es verstanden hat oder nicht.
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

 

Einloggen