精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>○ DOS>>实用资料>>如何取得系统逻辑驱动器个数

主题:如何取得系统逻辑驱动器个数
发信人: sle()
整理人: sle(2000-02-29 18:06:34), 站内信件
    在实际的程序编制中,经常需要知道系统有多少个逻辑驱动器,以避免操作
非法的逻辑驱动器符,提高程序的适应性和容错性。
在DOS系统中每一逻辑驱动器对应一驱动器参数块(Drive Parameter Block),
DPB由盘符、字节数/扇区、扇区数/簇、引导区扇区数、分配表扇区数、最大簇等
信息构成,是磁盘BIOS参数块(BIOS Parameter Block)拷贝,磁盘驱动程序用以
将逻辑扇区号转换为物理扇区号,这些DPB被组织成单向链表,由IO.SYS在初始化
自己时建立。如果搜索DPB链,就可得到驱动器的个数及其它关于该驱动器的信息
。INT 21H中断功能52H返回该链首址的指针(ES:BX),在每一个DPB的偏移18H(4
.0以下版本)或19H(以上版本)处为下一DPB的长指针,DPB链的最后一项指针指
向FFFFH。
以下的函数搜索DPB链并在AL中返回最大逻辑驱动器符,如AL减去“a”再加1则为
系统的逻辑驱动器个数,可用于汇编或C语言中。

Drvtest proc near
Mov ah,30h
Int 21h
Mov cs:dos_level,al
Push es
Mov ah,52h
Int 21h
Les bx,dword ptr es:[bx]
Mov di,18h
Cmp cs:dos_level,4
Jl v3
Inc di
V3:cmp word ptr es:[bs+di],0ffffh
Jz v4
Les bx,dword ptr es:[bx+di]
Jmp v3
V4:xor ax,ax
Mov al,byte ptr es,[bx]
Add al,’a’
Pop es
Ret
Dos_level db 0
Drvtest endp

--
sigh,,曾经有一盆清蒸的甲鱼摆在我的面前,可是我却没有珍惜, 
等到它被人瓜分的时候才追悔莫及,人世间最痛苦的事莫过于此。 
如果上天能够给我一个再来一次的机会,我会对它说:“我吃你” 
如果要给这份遗憾加上一个期限,我愿是---一分钟。   

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.72.235.145]

[关闭][返回]