Programmieren - alles kontrollieren 4.938 Themen, 20.667 Beiträge

Laufwerkcheck C/C++ (für DOS)

Mdl / 7 Antworten / Flachansicht Nickles

Habe ein Tool geschrieben, das sogar noch direkt unter MSDOS läuft, also nicht nur in einer DOS-Box (Borland C++ 5) und hänge da mit einer Prozedur etwas fest:

Die soll im Wesentlichen prüfen, ob ein Bestimmtes Laufwek, z.B. E: existiert und ob ein Medium eingelegt ist. Ersteres klappt mittels getdisk/setdisk prima, nur sobald ich diese Befehle auf ein Laufwerk anwende, das kein Medium eingelegt hat (z.B. Diskettenlaufwerk, CD-Laufwerk) erscheint (unter Windows) eine Aufforderung dies doch bitte zu tun.

Wie kann ich also checken, ob ein Medium eingelegt ist, ohne dass der Anwender interagieren muss?

Vielen Dank,

Mdl

bei Antwort benachrichtigen
Mdl Nachtrag zu: „Laufwerkcheck C/C++ (für DOS)“
Optionen

Ok, mich jetzt doch endlich durchgerungen altes Neuland (Assembler) zu betreten...

Ich benutze den C++Builder und habe festgestellt, dass es dort (zumindest ab Version 6) diese _int86()-Funktionen in DOS.h nicht mehr gibt. Habe mit GREP gesucht, aber auch in den anderen Header-Dateien nichts gefunden.

Aber es gibt den Befehl asm, __asm, mit dem Assemblercode direkt eingebunden werden kann.

Unter Zuhilfenahme der Wiki-Dokumentation-Info


Interrupts 80x86/ INT 13

Funktion 1: Status lesen
AH=1 Status lesen
DL=Laufwerknummer

Ausgabe: CY-Flag zeigt Fehler an, AH = Fehler-Code


habe ich folgendes codiert:


bool disk_available; {
BYTE dev=(BYTE)disk; // z.B. 0 für Laufwerk 0 (= A:)
char reg_ah;
__asm {
mov ah, 0x01
mov dl, dev
int 0x13 // !! Zugriffsverletzung
mov reg_ah, ah
}
disk_available=(reg_ah==0);
}

(Der Code sollte die boolsche Variable disk_available mit true initialisieren, wenn das Laufwerk A: vorhanden ist, sonst eben mit false.)

!! Wird der Interrupt aufgerufen erhalte ich sofort eine Zugriffsverletzung!!!

Was habe ich falsch gemacht?
Können vielleicht unter XP Interrupts nicht ausgelöst werden?
(Das Prg. ist eine Konsolenanwendung und sollte unter eine DOS-BOX von XP laufen können)

Viele Grüße,

Mdl

bei Antwort benachrichtigen