![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 01:30 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 关于获取磁盘参数c/h/s的探讨 |
| 可打印版本 2,708 / 1 |
| 第1楼 yaya | 发表于 2009-01-09 17:05 |
| 银牌会员 发帖 353 积分 1,009 | |
|
关于获取磁盘参数c/h/s的探讨 系统启动时,要查找IO.SYS、NTLDR、GRLDR等,若系统不支持扩展读,需获取磁盘磁头数及每磁道扇区数。常用方法有四种。
1. 使用int13/ah=08获取。 CL(位7-6)+CH(位7-0)=柱面数,DH=磁头数,CL(位5-0)=每磁道扇区数。 注意:柱面数、磁头数从0开始,扇区数从1开始。 对于BIOS识别为软盘的u盘或img磁盘映像,BL=10,但有的BIOS存在bug,会给出错误参数。 由于柱面数最大为3FF,磁盘字节总数最大为8Gb,超过则不能表示。 2. 使用int13/ah=48获取。 DS:SI的偏移04=柱面数,偏移08=磁头数,偏移0C=每磁道扇区数,偏移10=磁盘总扇区数。 注意:柱面数、磁头数、扇区数从1开始。 应测试偏移02的标记(位7-0),若位1等于0,则不支持c/h/s参数获取,给出的c/h/s参数可能不正确,但磁盘总扇区数还是正确的。 3. 使用引导扇区DBR的BPB参数表获取。 对于FAT12,偏移1A=磁头数,偏移18=每磁道扇区数,偏移13=该分区总扇区数。 对于FAT16,偏移1A=磁头数,偏移18=每磁道扇区数,偏移20=该分区总扇区数。 对于FAT32、EXT2、EXT3,偏移1A=磁头数,偏移18=每磁道扇区数,偏移20=该分区总扇区数。 对于NTFS,偏移1A=磁头数,偏移18=每磁道扇区数,偏移28=该分区总扇区数。 注意:柱面数、磁头数、扇区数从1开始。 4. 使用主引导记录MBR获取。 偏移1C3=磁头数,偏移1C4(位5-0)=每磁道扇区数,偏移1CA=分区总扇区数。 注意:磁头数从0开始,扇区数从1开始。 本人认为第3、4种方法最方便可靠。因为查找IO.SYS、NTLDR、GRLDR等时,除了获取h/s参数,还需要获取BPB参数表的其他参数,如每簇扇区数、保留扇区数、隐含扇区数、$MFT(主文件表)的逻辑簇号、节点大小等等。既然要用到MBR及BPB,何不一并获取,而要舍近求远,舍简求繁?或许有人曰h/s参数可能被病毒破坏,那MBR及BPB的其他参数不也会被破坏? 5 对于c/h/s参数的探测,grldrstart.S采用逐次测试法,探测磁头数从1探测到FF,最少1次,最多255次,平均128次。若采用对折逼近法,只需8或9次。 程序代码如下: 上传一个探测程序,请把rar改为com。 附件 test.rar (706 bytes) |
|
| 第2楼 yjd | 发表于 2009-01-11 00:29 |
| 初级用户 发帖 76 积分 156 | |
|
支持一下。。
太高级了看不懂。通常我直接用winimage看^_^ |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |