@chr15
Das mit den Indizien weglassen ist ja das Problem das auch die "sicherern" Merkmale nicht unbedingt vorhanden sein müssen.
@kleiner
Das mit der "User-Entscheidung" das dies jetzt als FAT gemountet werden soll kann ja zusätzlich noch möglich sein. Eine Automatische Erkennung wäre aber doch komfortabler.
@TeeJay
Deine Einwende sind rundum richtig. Aber gerade diese Unsicherheiten die Du aufgezählt hast soll ja meine "Erkennungs-Strategie" weitgehend ausräumen.
Ja, MSWIN4.1 muss nicht da stehen. Aber wenn es doch da steht, kann man doch davon ausgehen das es mit hoher Warscheinlichkeit ein FAT-System ist.
Ja, auch "FAT?
?" 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.
Und eben deshalb weil MSWIN4.1 und FAT dort auch fehlen können und sicher oft auch fehlen werden, mach ich den zweiten Schritt und sage: Wenn ich FAT durch die beiden genannten Merkmalen nicht erkannt habe, dann kann ich nur noch eine Wahrscheinlichkeit "ermitteln" das es sich um ein FAT-System handelt.
Und dazu sammel ich eben 5 Indizien. Wenn nach der Prüfung nun mindestens 3 Indizien für ein FAT-System vorliegen dann ist es auch ziemlich warscheinlich das es ein FAT-System ist. Denn das ein anderes Filesystem genau an diesen Positionen genau solche Werte aufweist das drei Indizien erfüllt sind ist doch sehr unwahrscheinlich.
Selbstverständlich weiß ich das keine der geprüften Felder den erwarteten Wert aufweisen muss. Aber dann ist die automatische Erkennung halt gescheitert, auch wenn es doch ein FAT-System sein sollte.
Nochwas zu den einzelnen Indizien-Positionen:
"BytesPerSector muss ja nicht 512 Bytes sein. Obwohl das noch halbwegs standard ist."
Ja, deshalb nehm ich es ja nur als "Indiz" und nicht als Beweis.
"Die Anzahl der FAT-Tabellen muss nicht 2 sein. Ein gültiges FAT System kommt auch mit nur einer oder theoretisch sogar 255 aus"
Genau das selbe. Ich sag halt: "Wenn genau an dieser Position eine 2 steht, ist es ein Indiz dafür das es ein FAT sein könnte.
"Das BPB_Media bezieht sich soweit ich weiß auf den Medientyp der bei FAT12 meist die Diskette (0xF0) ist. Bei einer HDD könnte das etwas anderes sein"
Richtig, F0h ist es nur bei einer Diskette. Deshalb prüfe ich das Feld ja auf größer/gleich F0h. (Zitat Microsoft: Erlaubte Werte sind: F0h, F8h, F9h, FAh, FBh, FCh, FDh, FEh, FFh. Für Wechseldatenträger wird meist F0h verwendet.)
"Die Drv-Num könnte ebenfalls anders als 0 oder 80 sein. Gibt ja Leute die haben mehrere Diskettenlaufwerke und Festplatten."
Nun ja. Hiezu kann ich nichts wirklich kompetentes sagen, da dies das einzige Feld ist, welches ich nicht wirklich verstanden hab. Was ist zum Beispiel wenn auf einer Diskette hier eine 0 steht und ich lege sie in LW-B ein?
Aber egal was nun hier steht, wenn halt hier 0 oder 80h steht, ist es doch schon wieder ein Indiz für ein FAT-System.
"Die Boot-Sig gibt meines Wissens nur an ob die nachfolgenden 3 Einträge des BootInfoBlocks vorhanden sind."
Genau, eine andere Funktion hat laut Microsoft dieses Feld nicht (nur FAT12 und FAT16). Wenn aber nun hier an Position 36 tatsächlich eine 29h stehen sollte, ist es doch wieder ein guter "Hinweis" auf FAT.
Was ich damit sagen will:
Eine absolut sichere Erkennung ist nich möglich, das weis ich schon. Aber man kann doch nach Hinweisen (Indizien) suchen und sagen: "Falls ich mindestens so-und-so viele Hinweise finde, dann ist es wahrscheinlich FAT".
PS: Ich meine "Idizien" wie die Indizien vor Gericht, also ein stichhaltiger Hinweis, aber noch kein Beweis.