中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] »
作者:
标题: 请高手把SRCMBR改造一下 上一主题 | 下一主题
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『楼 主』:  请高手把SRCMBR改造一下

我想备份/恢复某硬盘的任意绝对扇区,如0柱0面25扇区
想采用SRCMBR的命令行格式(不要GUI)。
SRCMBR 硬盘号 文件名 参数
改造成
SRCMBR 硬盘号 柱 面 扇 文件名 参数
如果无法改,请大家推荐其它的能实现此功能的小工具吧。





DOS之家 http://doshome.com 站长 葛明阳
2005-2-2 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 2 楼』:  

SRCMBR是经过压缩的,脱壳+修改的劳动量比重新写一个程序都累。看了一下,上面的参数中好像只要读指定的“一个”扇区,用bios int 13功能,不难实现,但有限制,即只能读8.4G以前的(否则要用扩展int 13,我还没搞通),按理说备份MBR、FAT表、BOOT扇应该足够了吧。正在进行中……



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-3 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 3 楼』:  

打开附件



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-4 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 4 楼』:  

先谢谢了,等我一试,另外,能否提供源代码?



DOS之家 http://doshome.com 站长 葛明阳
2005-2-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 5 楼』:  

#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[512];
    FILE *fp;    drive=0x80+atoi(argv[1])-1;
    head=atoi(argv[2]);
    track=atoi(argv[3]);
    sector=atoi(argv[4]);    if (argc!=7)
    {
        ShowHelp();
        exit(2);
    }
    if (strcmp(argv[6],"/b"==0)
    {
        if (biosdisk(READ,drive,head,track,sector,nsects,buf))
        {
            printf("Failed to read from sector !\n";
            exit(1);
        }
        if ((fp=fopen(argv[5],"wb")!=NULL)
        {
            fwrite(buf,512,1,fp);
            fclose(fp);
            printf("Backup sector to file %s done !\n",argv[5]);
            exit(0);
        }
        else
        {
            printf("Open File %s Failed !\n",argv[5]);
            exit(1);
        }
    }
    if (strcmp(argv[6],"/r"==0)
    {
        if ((fp=fopen(argv[5],"rb")!=NULL)
        {
            fread(buf,512,1,fp);
            fclose(fp);
        }
        else
        {
            printf("Open File %s Failed !\n",argv[5]);
            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[5]);
            exit(0);
        }
    }
}
匆忙中写的,问题还有,但实在忙,这两天没时间去完善了,大家有兴趣的话修改一下吧:
1. 对参数的检测:如果最后一个参数错误,没有任何提示;
2. 基于int 13,不支持8.4G以后的扇区,一定要的话,可使用扩展int 13,自己改吧;
3. 每次只读一个扇区,但留了接口,修改时注意要动态分配内存;
4. 为了方便批处理中使用,程序均采用exit()函数结束。




从来不用别人的东西,要用,也先改成自己的再说!
2005-2-9 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
hyzys
初级用户




积分 189
发帖 17
注册 2004-9-23
状态 离线
『第 6 楼』:  

crshen,你好!我想利用你这个程序来备份扩展分区的分区表,即在扩展分区只有一个逻辑分区备份了扇区,然后再将扩展分区由一个逻辑分区分成两个分区,如果此时再恢复扇区,则扩展分区到回原来的只有一个逻辑分区的状态。请问要实现这样该怎样写?hdsect 1 0 0 63 吗?

2005-2-10 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 7 楼』:  

     道 面 扇           道 面 扇              起始扇(逻辑)            结束扇              总共扇区
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



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-11 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
hyzys
初级用户




积分 189
发帖 17
注册 2004-9-23
状态 离线
『第 8 楼』:  


<SCRIPT language=JavaScript>
var actioninfo3='單貼屏蔽';document.write (dvbbs_show_topic('90417','9','crshen','','','crshen@tom.com','|||67154440|||||||||||||||','','uploadface/200451212582714.gif','','','从来不用别人的东西,要用,也先改成自己的再说!','无门无派','     道 面 扇           道 面 扇              起始扇(逻辑)            结束扇              总共扇区
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','2005-2-11 11:33:26','face1.gif','*.*.*.*','15000',1,0,17150,2,'新手上路','95','95','79','2004-2-10','289','151','149','','1',0,'0','level0.gif',4,'2005-2-11 14:16:35','0',6,'tablebody1','0','0'));
<script>
crshen,能请你改一下你的这个程序,使得其可以备份扩展分区表吗?

2005-2-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 9 楼』:  

上面已经说过,这个程序是有限制的,即不能读写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扇区)。



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-11 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 10 楼』:  

谢谢提供源代码,第一次真正体会TC的乐趣!预计将在下一版的 一键GHSOT 用到本工具,特此声明!



DOS之家 http://doshome.com 站长 葛明阳
2005-2-12 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 11 楼』:  

狂顶!强烈希望  crshen编一个能备份扩展分区表且支持命令行操作的软件!目前除了DISKGEN外,没有任何一个软件能够备份扩展分区表!可惜DISKGEN不支持命令行操作。

[此贴子已经被作者于2005-2-12 15:17:00编辑过]




2005-2-12 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 12 楼』:  绝世高手哪里找?

网上有许多DOS高手,但有谁见过绝世高手,如: KVFIX的作者王江民, DISKGEN作者李大海?
他们经常出没于哪个论坛? 网名是什么?



DOS之家 http://doshome.com 站长 葛明阳
2005-2-12 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 13 楼』:  

要读写137G以内的硬盘其实也没什么难的,这两天抽空看了下扩展int13的资料,已用汇编完成读扇区功能,正在想办法移植到C下。由于学的不是计算机专业,很多软硬件方面的问题要边查资料边实践,进度有点慢,哪位对C或汇编比较在行的,不妨留个联系方式,共同探讨。另外:我在论坛发表所有文章或软件等,均出于个人爱好,任何人都可以下载、使用、修改,并不必保留原作说明。如果大家觉得有用,我已深感欣慰!



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-13 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 14 楼』:  



  Quote:
以下是引用walu在2005-2-12 15:15:32的发言:

狂顶!强烈希望  crshen编一个能备份扩展分区表且支持命令行操作的软件!目前除了DISKGEN外,没有任何一个软件能够备份扩展分区表!可惜DISKGEN不支持命令行操作。

构思命令行参数pt_tool.exe [/backup|/restore]
备份扇区为MBR扇区及主分区表中指向的四个分区的首个扇区(包括了扩展分区表和BOOT扇区),不知是否满足你的要求?



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-13 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
walu
高级用户




积分 916
发帖 201
注册 2003-5-4
状态 离线
『第 15 楼』:  



  Quote:
以下是引用crshen在2005-2-13 21:50:39的发言:
>
构思命令行参数pt_tool.exe [/backup|/restore]
备份扇区为MBR扇区及主分区表中指向的四个分区的首个扇区(包括了扩展分区表和BOOT扇区),不知是否满足你的要求?

狂喜!真的感谢crshen辛苦劳动,你这个程序肯定能满足网上大多数朋友的需求了,一直在苦苦寻求这样的软件,终于在DOS论坛上遇到高手了,衷心谢谢你crshen!希望能尽快用到你的这个软件!

2005-2-13 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: