我曾帮一个卖电脑的朋友做过类似一键恢复的程序,就是用WBAT等批处理工具来包装Ghost,把备份保存在最后一个分区的\SYSBCK目录下,备份和恢复一次只要几分钟。我给他演示的时候效果还不错,但不久他就沮丧地告诉我:“客户在F盘发现了一个隐藏的大文件夹,里面的文件双击又不能打开,就当垃圾文件删掉了!”--我真是欲哭无泪!我已经作了隐藏,用户手册上也写了,但客户还是会自作聪明地去删掉它--看来客户的问题的确是千奇百怪。
我想能否有这样一种方法:
就是划出一个分区(末分区)来单独保存系统备份,在备份完成后将此分区隐藏,即分区ID改为1BH。这样客户的操作系统启动后怎么也看不到备份盘了,这就避免了备份被删除的尴尬--当然那些客户会用FDISK也就不用费这个脑筋了。用我们的系统恢复盘启动时,这个备份分区又可见了,一切就和没有隐藏一样,可以恢复也可以更新备份。这样不就方便、安全多了。
这在一些品牌机的恢复盘中曾出现过,可它们不是Free的,甚至很吝啬,不允许在别的机器上运行。
我不想破解它们,我想自己解决。我认真思考过这办法的技术难点,就是如何能在DOS中让隐藏分区可见(可读、可写)。想了两种思路:
第一种思路:在系统恢复盘的引导扇区中加入一段程序,它驻留内存后接管Int13H,凡是对备份分区的ID的读取(1BH),均返回0BH即可见分区。后来的DOS启动后,此分区自然可见了。这是类似引导型病毒的做法。
第二种思路:在系统恢复盘的DOS启动后,由一个程序查找隐藏的备份分区,并将它作为一个正常的FAT32分区添加到DOS的设备链上,并赋以相应的盘符。这是类似NTFS4DOS的做法。
我觉得这两种做法都应该可行,也各有各的难点。一的难点是,简单的INT13H中断例程好写,但我没有现在在扩展INT13H中大硬盘的访问规则--这可是来不得半点马虎的!二的难点是,DOS的设备链工作原理和细节我手头的资料中没有介绍。如果有人知道,希望能告诉我。
全世界无产者,联合起来!
我想能否有这样一种方法:
就是划出一个分区(末分区)来单独保存系统备份,在备份完成后将此分区隐藏,即分区ID改为1BH。这样客户的操作系统启动后怎么也看不到备份盘了,这就避免了备份被删除的尴尬--当然那些客户会用FDISK也就不用费这个脑筋了。用我们的系统恢复盘启动时,这个备份分区又可见了,一切就和没有隐藏一样,可以恢复也可以更新备份。这样不就方便、安全多了。
这在一些品牌机的恢复盘中曾出现过,可它们不是Free的,甚至很吝啬,不允许在别的机器上运行。
我不想破解它们,我想自己解决。我认真思考过这办法的技术难点,就是如何能在DOS中让隐藏分区可见(可读、可写)。想了两种思路:
第一种思路:在系统恢复盘的引导扇区中加入一段程序,它驻留内存后接管Int13H,凡是对备份分区的ID的读取(1BH),均返回0BH即可见分区。后来的DOS启动后,此分区自然可见了。这是类似引导型病毒的做法。
第二种思路:在系统恢复盘的DOS启动后,由一个程序查找隐藏的备份分区,并将它作为一个正常的FAT32分区添加到DOS的设备链上,并赋以相应的盘符。这是类似NTFS4DOS的做法。
我觉得这两种做法都应该可行,也各有各的难点。一的难点是,简单的INT13H中断例程好写,但我没有现在在扩展INT13H中大硬盘的访问规则--这可是来不得半点马虎的!二的难点是,DOS的设备链工作原理和细节我手头的资料中没有介绍。如果有人知道,希望能告诉我。
全世界无产者,联合起来!
Gemini 解答
结论
在 DOS 中让隐藏分区(如类型为
0x1B的 FAT32 隐藏分区)可见,核心是修改分区表中该分区的类型标识(或在内存中虚拟此修改),使其被 DOS 识别为合法的文件系统类型(如0x0B对应 FAT32)。你提出的两种思路均具有可行性,且在当年的技术背景下是典型的解决方案方向。技术前提与限制
- 分区类型标识的作用:DOS/Windows 系统通过分区表中 16 字节分区项的第 5 字节(偏移
0x04)识别分区类型。仅当该字节为系统支持的类型(如0x01/0x06/0x0B等)时,才会为其分配盘符并挂载;0x1B(隐藏 FAT32)等类型则被忽略。- 扩展 INT 13H 的必要性:对于容量超过 8GB 的硬盘(或使用 LBA 模式的硬盘),基本 INT 13H(CHS 寻址)无法访问全部扇区,必须通过扩展 INT 13H(
AH=42h/43h等功能)实现线性寻址。这是第一种思路需要解决的关键技术点。- DOS 设备链的原理:DOS 通过设备驱动链管理磁盘设备,每个逻辑盘对应一个
DEVICE结构(包含驱动入口、设备名、盘符等信息)。第二种思路需手动构造此结构并插入链中,但需依赖 DOS 内部未公开的结构细节(如DOSDATA段中的设备链头指针),当年资料匮乏时实现难度较高。两种思路的实现分析
1. 引导扇区驻留程序接管 INT 13H(类似病毒的做法)
- 核心逻辑:在恢复盘的引导扇区中加入程序,读取硬盘主引导记录(MBR,第 0 扇区)中的分区表,将目标隐藏分区的类型从
0x1B改为0x0B,然后将修改后的分区表暂存内存;接着驻留内存并接管 INT 13H,当 DOS 读取 MBR 时,返回内存中修改后的分区表而非硬盘原始数据。- 扩展 INT 13H 的处理:需同时接管基本 INT 13H(
AH=02h读扇区)和扩展 INT 13H(AH=42h扩展读)。对于扩展 INT 13H,需解析磁盘地址数据包(DAP)中的扇区地址,若读取的是 MBR 扇区(BlockNum=0),则返回内存中修改后的 MBR;否则转发给原始 INT 13H 处理。- 当年的技术难点:扩展 INT 13H 的 DAP 结构(如 64 位扇区地址)在早期资料中普及度低,且不同 BIOS 对扩展 INT 13H 的支持存在差异,需额外处理兼容性(如先通过
AH=41h检测扩展 INT 13H 是否存在)。2. DOS 启动后添加设备链(类似 NTFS4DOS 的做法)
- 核心逻辑:DOS 启动后,通过程序直接读取硬盘分区表,找到隐藏分区的起始扇区和大小;然后构造一个虚拟的磁盘设备驱动,将其插入 DOS 的设备链中,并分配盘符(如
F:)。该驱动需实现基本的磁盘读写接口(如READ/WRITE函数),底层通过扩展 INT 13H 访问隐藏分区的扇区。- 当年的技术难点:DOS 设备链的结构(如
DEVICE结构体的字段定义、链头位置)属于未公开的内部实现,不同 DOS 版本(如 MS-DOS 6.22 与 FreeDOS)可能存在差异,需通过逆向工程或查阅第三方资料获取细节。当年此类资料较少,导致实现成本较高。历史背景补充
当年品牌机的隐藏恢复分区(如 IBM 的 F11 恢复)普遍采用修改分区类型的方式隐藏,恢复时通过专用引导盘(或 BIOS 热键)加载自定义程序,临时修改分区类型为可见,再调用 Ghost 等工具恢复。你提出的思路与这些商业方案的核心逻辑一致,仅实现细节不同。
此外,后续跟帖中提到的 Ghost 8.0 支持直接访问隐藏分区(通过
1:X格式的物理分区标识),本质是 Ghost 绕过了 DOS 的盘符分配机制,直接通过分区表信息访问扇区,这也是当年更简便的替代方案(无需自行编写程序)。若需支持
0x12等新型隐藏分区类型(如 Post #20 提到的),只需在程序中增加对该类型的识别与修改逻辑即可。
从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。






