Archiv verlassen und diese Seite im Standarddesign anzeigen : Laufwerke herausfinden
Lord_Otter
04.09.2002, 20:46
Moin !
Ich wollte mal eine Routine schreiben, die alle Laufwerke ermittelt.
Nun habe ich mal Code gesehen, mit dem ich prüfen kann, ob ein Laufwerk gültig ist.
Dann musste ich nur noch alle Laufwerksbuchstaben ('A' bis 'Z') durchlaufen und prüfen.
(Den Code zum Überprüfen des Laufwerks habe ich leider gerade nicht da, kann ihn aber nachposten...)
Die Ausgabe sollte sein:
A
C
D
E
F
G
H
Aber sie war:
A
B
C
D
E
F
G
H
Kann ich irgentwie verhinden, dass er Laufwerk B als gültig erkennt ?
Lord_Otter
05.09.2002, 07:39
Ah, das wäre dann wohl für den Protected Mode.
Das ist ja schonmal was, danke !
Aber gibt es sowas auch für den Real-Mode oder ist das (wie ich mir vorstellen kann), viel zu kompliziert ?
Format C:
05.09.2002, 12:47
Im Real Mode (also unter DOS) bleiben wohr nur noch die Interupts übrig.
Ich würd den 13h nehmen und einen Laufwerks Reset machen (Funktion 00) , das bei allen Laufwerken, Wenn die Funktionsrückgabe Fehlerfrei ist ist das Laufwerk da :)
Es werden jedoch nur Physikalische Laufwerke erkannt, logische nicht.
Lord_Otter
05.09.2002, 14:11
Danke, das hilft mir doch schon weiter.
Bei meiner ersten Routine werden auch logsiche erkannt, allerdings auch b.
Wenn ich mit dem INT 13H B als nicht-physisch erkenne (Laufwerk B ist bei mir nicht eingebaut, also dürfte er das nicht erkennen)
Das hilft mir total weiter, danke !
Muss mal, wie Felix jetzt sagen würde, in Ralf Brown's Interruptlist gucken.
Doch leider habe ich die momenttan nicht zur Hand, aber egal...
Format C:
05.09.2002, 14:44
mov ah, 0
mov dl, 0h ; 00h=Floppy A, 01h=Floppy B, 80h=HD1, 81h=HD2 usw.
int 13h
in ah ist dann der Statuscode:
bei erfolg ist ah = 0
im Fehlerfall ( z.B. Laufwerk nicht vorhanden) ah > 0
Felix Kaiser
05.09.2002, 14:45
Ich weiß nich warum ihr das so kompliziert angeht, man kann doch ganz einfach DOS abtasten, welches alles gültige DOS Laufwerke sind, einfach die Unit DOS einbinden und folgenden Code benutzen:
function IsDrive(Drive: char): boolean;
var
Saved: byte;
r: registers;
begin
r.ah:= $19;
Intr($21,r);
Saved:= r.al;
r.ah:= $0E;
r.dl:= Ord(Drive)-65;
Intr($21,r);
r.ah:= $19;
Intr($21,r);
IsDrive:= r.al = Ord(Drive)-65;
r.ah:= $0E;
r.dl:= Saved;
Intr($21,r);
end;
Lord_Otter
05.09.2002, 17:01
Das ist ja einfach, damit hätte ich nicht gerechnet.
Jetzt nur noch schnell in Assembler übersetzen und fertig.
Danke.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.