我写了一个目录信息实用程序,(因为我和我为此收集和使用老式硬件而写的人)使它兼容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)