小编use*_*848的帖子

在DOS 7.x中获取大型驱动器结构信息

我写了一个目录信息实用程序,(因为我和我为此收集和使用老式硬件而写的人)使它兼容DOS和Windows 9x以及Windows XP/Vista/7/8 64位(因为我们也使用那些.)我遇到的问题是Windows 9x和FAT32驱动器.只要Windows 9x实际加载,我设法让它工作,但如果我只启动到命令提示符,或者在MS-DOS模式下重新启动,我将失去对Windows API的访问权限,这使我能够获取大型驱动器数据并且它违反了我的DOS惯例.这些仅限于2GB限制例程.检查DOS 7.x程序(主要是chkdsk)如何处理这个(因为它们报告正确的驱动器大小没有问题),它们似乎使用DOS中断(主要是INT 21h,)来做到这一点.思考,没问题,我会做一个快速版本检查,如果它是DOS 7或更高版本,我将只运行快速装配路由以获得驱动器结构并计算总的和可用空间.只是,例程(虽然它没有返回错误)不会填充我的缓冲区.

这是代码:

#include <stdio.h>
#include <dos.h>

void main(void) {
    unsigned short hes,hdi,sectors,bytes;
    unsigned long tclusters,fclusters;
    unsigned char far *drivedata;
    char test = '\0';
    char display[17] = "0123456789ABCDEF";
    int count;

    drivedata = new unsigned char [63];

    for (count = 0; count < 63; count++) drivedata[count] = '\0';

    drivedata[0] = '\x3d';
    drivedata[1] = '\x00';

    hes = FP_SEG(drivedata);
    hdi = FP_OFF(drivedata);

asm {
        push ax
        push es
        push di
        push ds
        push dx
        push …
Run Code Online (Sandbox Code Playgroud)

c++ assembly dos

5
推荐指数
1
解决办法
104
查看次数

标签 统计

assembly ×1

c++ ×1

dos ×1