6

我正在尝试检查驱动器 A 中是否存在任何磁盘:(在我的程序安装后,我需要确保计算机不会从安装软盘启动)。我尝试过使用 _access 方法(未定义的引用...)、FILE* 并在软盘内创建目录并在检查后将其删除。不幸的是,DOS 显示关于将磁盘放入驱动器的丑陋文本(破坏我的 TUI 并使用户认为驱动器中的软盘很重要)。那么如何抑制此消息,或安全地检查驱动器中是否存在磁盘?

4

2 回答 2

1

可能是BIOS INT 13H 16H: Detect Media Change - 它有一个状态:

80H = diskette drive not ready or not installed

这可能会解决您的问题 - 我缺乏古董硬件和软件来亲自测试它。

#include <dos.h>

unsigned int DetectMediaChange()
{
    union REGS regs;

    regs.h.ah = 0x16;            // Detect Media Change
    regs.h.dl = 0;               // Drive A
    int86( 0x13, &regs, &regs ); // BIOS Disk I/O INT 13h

    return regs.h.ah ;           // Status :  00H = diskette change line not active
                                 //           01H = invalid drive number
                                 //           06H = either change line is not supported or
                                 //                 disk change line is active (media was swapped)
                                 //           80H = diskette drive not ready or not installed
                                 // else= BIOS disk error code if CF is set to CY
}
于 2017-05-08T14:53:56.233 回答
1

好的,我想通了:

char far * bufptr;
union REGS inregs, outregs;
struct SREGS segregs;
char buf [1024];
avaliable(){
    redo:
    segread(&segregs);
    bufptr = (char far *) buf;
    segregs.es = FP_SEG(bufptr);
    inregs.x.bx = FP_OFF(bufptr);
    inregs.h.ah = 2;
    inregs.h.al = 1;
    inregs.h.ch = 0;
    inregs.h.cl = 1;
    inregs.h.dh = 0;
    inregs.h.dl = 0;
    int86x(0x13, &inregs, &outregs, &segregs);
    return outregs.x.cflag;
}

如果磁盘在驱动器中,则返回 true。

于 2017-05-08T15:48:52.463 回答