![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-17 06:04 |
共 47,813 主题排行 / 349,903 发帖 / 今日 0 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » 请高手把SRCMBR改造一下 |
| 可打印版本 2,576 / 33 |
| 第1楼 gmy | 发表于 2005-02-02 00:00 |
| 版主 发帖 392 积分 1,113 | |
|
请高手把SRCMBR改造一下 我想备份/恢复某硬盘的任意绝对扇区,如0柱0面25扇区
想采用SRCMBR的命令行格式(不要GUI)。 SRCMBR 硬盘号 文件名 参数 改造成 SRCMBR 硬盘号 柱 面 扇 文件名 参数 如果无法改,请大家推荐其它的能实现此功能的小工具吧。 |
|
| 第2楼 crshen | 发表于 2005-02-03 00:00 |
| 中级用户 发帖 126 积分 447 | |
|
SRCMBR是经过压缩的,脱壳+修改的劳动量比重新写一个程序都累。看了一下,上面的参数中好像只要读指定的“一个”扇区,用bios int 13功能,不难实现,但有限制,即只能读8.4G以前的(否则要用扩展int 13,我还没搞通),按理说备份MBR、FAT表、BOOT扇应该足够了吧。正在进行中……
|
|
| 第3楼 crshen | 发表于 2005-02-04 00:00 |
| 中级用户 发帖 126 积分 447 | |
| 第4楼 gmy | 发表于 2005-02-07 00:00 |
| 版主 发帖 392 积分 1,113 | |
|
先谢谢了,等我一试,另外,能否提供源代码?
|
|
| 第5楼 crshen | 发表于 2005-02-09 00:00 |
| 中级用户 发帖 126 积分 447 | |
|
#include <stdio.h>
#include <bios.h> #define READ 2 #define WRITE 3void ShowHelp() { printf("\nHD SECTOR BACKUP & RESTORE TOOLS by CRSHEN\n\n\ Usage: hdsect.exe drive head track sector filename parameter\n\ drive: 1=first HD 2=second HD and so on\n\ head track sector MUST be integer\n\ parameter: /b means backup /r means restore, *case sensitive*\n" ;}void main(int argc,char *argv) { int drive=0x80,head=0,track=0,sector=1,nsects=1; unsigned char buf; FILE *fp; drive=0x80+atoi(argv)-1; head=atoi(argv); track=atoi(argv); sector=atoi(argv); if (argc!=7) { ShowHelp(); exit(2); } if (strcmp(argv,"/b" ==0){ if (biosdisk(READ,drive,head,track,sector,nsects,buf)) { printf("Failed to read from sector !\n" ;exit(1); } if ((fp=fopen(argv,"wb" )!=NULL){ fwrite(buf,512,1,fp); fclose(fp); printf("Backup sector to file %s done !\n",argv); exit(0); } else { printf("Open File %s Failed !\n",argv); exit(1); } } if (strcmp(argv,"/r" ==0){ if ((fp=fopen(argv,"rb" )!=NULL){ fread(buf,512,1,fp); fclose(fp); } else { printf("Open File %s Failed !\n",argv); exit(1); } if (biosdisk(WRITE,drive,head,track,sector,nsects,buf)) { printf("Failed to write to sector !\n" ;exit(1); } else { printf("Restore sector from file %s done !",argv); exit(0); } } } 匆忙中写的,问题还有,但实在忙,这两天没时间去完善了,大家有兴趣的话修改一下吧: 1. 对参数的检测:如果最后一个参数错误,没有任何提示; 2. 基于int 13,不支持8.4G以后的扇区,一定要的话,可使用扩展int 13,自己改吧; 3. 每次只读一个扇区,但留了接口,修改时注意要动态分配内存; 4. 为了方便批处理中使用,程序均采用exit()函数结束。 |
|
| 第6楼 hyzys | 发表于 2005-02-10 00:00 |
| 初级用户 发帖 17 积分 189 | |
|
crshen,你好!我想利用你这个程序来备份扩展分区的分区表,即在扩展分区只有一个逻辑分区备份了扇区,然后再将扩展分区由一个逻辑分区分成两个分区,如果此时再恢复扇区,则扩展分区到回原来的只有一个逻辑分区的状态。请问要实现这样该怎样写?hdsect 1 0 0 63 吗?
|
|
| 第7楼 crshen | 发表于 2005-02-11 00:00 |
| 中级用户 发帖 126 积分 447 | |
|
道 面 扇 道 面 扇 起始扇(逻辑) 结束扇 总共扇区
MBR 0 0 1 - - - - - - C 0 1 1 276 239 63 扩 277 0 1 554 239 63 4,188,240 8, 391,599 4,203, 360 D 277 1 1 554 239 63 4,188,303 8, 391,599 4,203, 297 从上面的分区表可以看到,扩展分区在head 0 track 277 sect 1,首先要读MBR,从中读取分区信息。80 01 01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00 41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA 扩展分区表数据: 00 01 41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00 |
|
| 第8楼 hyzys | 发表于 2005-02-11 00:00 |
| 初级用户 发帖 17 积分 189 | |
|
crshen,能请你改一下你的这个程序,使得其可以备份扩展分区表吗?
|
|
| 第9楼 crshen | 发表于 2005-02-11 00:00 |
| 中级用户 发帖 126 积分 447 | |
|
上面已经说过,这个程序是有限制的,即不能读写8.4G以后的硬盘,原因在于三个参数面、柱、扇最大值分别为FF、3FF、3F,ff*3ff*3f*512=8414461440字节,约8.4G。现在的硬盘主流都是80G,所以程序没有很大实用价值,要备份扩展分区表,除非前面的分区比较小才行。等我有时间再重新写一个吧。另外,你的hdsect 1 0 0 63没有任何意义,第一分区之前的隐含扇区总数为63(即3F),第一分区(C盘)的BOOT扇为1面1扇0道(即第64扇区)。
|
|
| 第10楼 gmy | 发表于 2005-02-12 00:00 |
| 版主 发帖 392 积分 1,113 | |
|
谢谢提供源代码,第一次真正体会TC的乐趣!预计将在下一版的 一键GHSOT 用到本工具,特此声明!
|
|
| 第11楼 walu | 发表于 2005-02-12 00:00 |
| 高级用户 发帖 201 积分 916 | |
|
狂顶!强烈希望 crshen编一个能备份扩展分区表且支持命令行操作的软件!目前除了DISKGEN外,没有任何一个软件能够备份扩展分区表!可惜DISKGEN不支持命令行操作。
|
|
| 第12楼 gmy | 发表于 2005-02-12 00:00 |
| 版主 发帖 392 积分 1,113 | |
|
绝世高手哪里找? 网上有许多DOS高手,但有谁见过绝世高手,如: KVFIX的作者王江民, DISKGEN作者李大海?
他们经常出没于哪个论坛? 网名是什么? |
|
| 第13楼 crshen | 发表于 2005-02-13 00:00 |
| 中级用户 发帖 126 积分 447 | |
|
要读写137G以内的硬盘其实也没什么难的,这两天抽空看了下扩展int13的资料,已用汇编完成读扇区功能,正在想办法移植到C下。由于学的不是计算机专业,很多软硬件方面的问题要边查资料边实践,进度有点慢,哪位对C或汇编比较在行的,不妨留个联系方式,共同探讨。另外:我在论坛发表所有文章或软件等,均出于个人爱好,任何人都可以下载、使用、修改,并不必保留原作说明。如果大家觉得有用,我已深感欣慰!
|
|
| 第14楼 crshen | 发表于 2005-02-13 00:00 |
| 中级用户 发帖 126 积分 447 | |
以下是引用walu在2005-2-12 15:15:32的发言: 构思命令行参数pt_tool.exe 备份扇区为MBR扇区及主分区表中指向的四个分区的首个扇区(包括了扩展分区表和BOOT扇区),不知是否满足你的要求? |
|
| 第15楼 walu | 发表于 2005-02-13 00:00 |
| 高级用户 发帖 201 积分 916 | |
以下是引用crshen在2005-2-13 21:50:39的发言: 狂喜!真的感谢crshen辛苦劳动,你这个程序肯定能满足网上大多数朋友的需求了,一直在苦苦寻求这样的软件,终于在DOS论坛上遇到高手了,衷心谢谢你crshen!希望能尽快用到你的这个软件! |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |