如何在DOS中编程实现获取硬盘容量参数(高手请进!!!)
如何在DOS中编程实现获取硬盘容量参数(高手请进!!!) 问题点数:0、回复次数:1Top
1 楼clumsy(Kyrie eleison)回复于 2004-12-04 10:18:52 得分 0
可以通过扩展的 int13h 功能调用吧: int13h(AH=48h)
最后先大致看一下扩展的 int13h 的调用说明, 在调用下面的功能之前, 前调用 int13h(AH=41h) 检查一下
8) 取得驱动器参数
入口:
AH = 48h
DL = 驱动器号
DS:SI = 返回数据缓冲区地址
返回:
CF = 0, AH = 0 成功
DS:SI 驱动器参数数据包地址, (参见后面的介绍)
CF = 1, AH = 错误码
这个调用返回指定驱动器的参数.
驱动器参数数据包 Drive Parameters Packet
驱动器参数数据包是在扩展 Int13H 的取得驱动器参数子功能调用中使用的数据包. 格式如下:
struct DriveParametersPacket
{
WORD InfoSize; // 数据包尺寸 (26 字节)
WORD Flags; // 信息标志
DWORD Cylinders; // 磁盘柱面数
DWORD Heads; // 磁盘磁头数
DWORD SectorsPerTrack; // 每磁道扇区数
QWORD Sectors; // 磁盘总扇区数
WORD SectorSize; // 扇区尺寸 (以字节为单位)
};
信息标志用于返回磁盘的附加信息, 每一位的定义如下:
0 位:
0 = 可能发生 DMA 边界错误
1 = DMA 边界错误将被透明处理
如果这位置 1, 表示 BIOS 将自动处理 DMA 边界错误, 也就是说
错误代码 09H 永远也不会出现.
1 位:
0 = 未提供 CHS 信息
1 = CHS 信息合法
如果块设备的传统 CHS 几何信息不适当的话, 该位将置 0.
2 位:
0 = 驱动器不可移动
1 = 驱动器可移动
3 位: 表示该驱动器是否支持写入时校验.
4 位:
0 = 驱动器不具备介质更换检测线
1 = 驱动器具备介质更换检测线
5 位:
0 = 驱动器不可锁定
1 = 驱动器可以锁定
要存取驱动器号大于 0x80 的可移动驱动器, 该位必须置 1
(某些驱动器号为 0 到 0x7F 的设备也需要置位)
6 位:
0 = CHS 值是当前存储介质的值 (仅对于可移动介质), 如果
驱动器中有存储介质, CHS 值将被返回.
1 = CHS 值是驱动器支持的最大值 (此时驱动器中没有介质).
7 - 15 位: 保留, 必须置 0.Top




