中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 那位有办法能在DOS中让隐藏分区可见吗?
« [1] [2] »
作者:
标题: 那位有办法能在DOS中让隐藏分区可见吗? 上一主题 | 下一主题
TurboY
中级用户

绝不写垃圾帖


积分 322
发帖 99
注册 2004-7-3
来自 湖北
状态 离线
『楼 主』:  那位有办法能在DOS中让隐藏分区可见吗?

我曾帮一个卖电脑的朋友做过类似一键恢复的程序,就是用WBAT等批处理工具来包装Ghost,把备份保存在最后一个分区的\SYSBCK目录下,备份和恢复一次只要几分钟。我给他演示的时候效果还不错,但不久他就沮丧地告诉我:“客户在F盘发现了一个隐藏的大文件夹,里面的文件双击又不能打开,就当垃圾文件删掉了!”--我真是欲哭无泪!我已经作了隐藏,用户手册上也写了,但客户还是会自作聪明地去删掉它--看来客户的问题的确是千奇百怪。
  我想能否有这样一种方法:
  就是划出一个分区(末分区)来单独保存系统备份,在备份完成后将此分区隐藏,即分区ID改为1BH。这样客户的操作系统启动后怎么也看不到备份盘了,这就避免了备份被删除的尴尬--当然那些客户会用FDISK也就不用费这个脑筋了。用我们的系统恢复盘启动时,这个备份分区又可见了,一切就和没有隐藏一样,可以恢复也可以更新备份。这样不就方便、安全多了。
  这在一些品牌机的恢复盘中曾出现过,可它们不是Free的,甚至很吝啬,不允许在别的机器上运行。
  我不想破解它们,我想自己解决。我认真思考过这办法的技术难点,就是如何能在DOS中让隐藏分区可见(可读、可写)。想了两种思路:
  第一种思路:在系统恢复盘的引导扇区中加入一段程序,它驻留内存后接管Int13H,凡是对备份分区的ID的读取(1BH),均返回0BH即可见分区。后来的DOS启动后,此分区自然可见了。这是类似引导型病毒的做法。
  第二种思路:在系统恢复盘的DOS启动后,由一个程序查找隐藏的备份分区,并将它作为一个正常的FAT32分区添加到DOS的设备链上,并赋以相应的盘符。这是类似NTFS4DOS的做法。
  我觉得这两种做法都应该可行,也各有各的难点。一的难点是,简单的INT13H中断例程好写,但我没有现在在扩展INT13H中大硬盘的访问规则--这可是来不得半点马虎的!二的难点是,DOS的设备链工作原理和细节我手头的资料中没有介绍。如果有人知道,希望能告诉我。

  全世界无产者,联合起来!




从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。
2004-7-6 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (123693086)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 2 楼』:  

"我已经作了隐藏,用户手册上也写了,但客户还是会自作聪明地去删掉它--看来客户的问题的确是千奇百怪。"

其实,如果就是这个原因的话,那现有条件就可以了,而隐藏分区并不是必需的。既然用户手册中已经写得很清楚了,那如果某个客户仍然去自作聪明的话,那完全就是他自己的问题了,而跟我们没有任何关系的。试想,在此隐藏文件夹并不会影响系统,而且我们在手册中已经交待得很清楚的情况下,用户仍然自作聪明而造成损失,难道不该给他个教训吗?当然,这点教训就已经够了,并不会破坏他的系统。当他真正体会到这个教训时,就不会再去自作聪明了。我觉得我们似乎没有必要就为了那些喜欢自作聪明的人去伤脑筋进行这种复杂的研究,不是吗?





Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2004-7-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
wgx333
初级用户




积分 125
发帖 10
注册 2004-6-23
状态 离线
『第 3 楼』:  

我想我们要做得更好,不能逃避问题.
还是实现这个功能比较好!

2004-7-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 4 楼』:  

int 13h 的42h功能:扩展读扇区
int 13h 的43h功能:扩展写扇区
<>中有详细的描述
但似乎太多了,我这里写不完
你去找找这本书吧
ps:这是本不错的书^_^

2004-7-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
TurboY
中级用户

绝不写垃圾帖


积分 322
发帖 99
注册 2004-7-3
来自 湖北
状态 离线
『第 5 楼』:  

以下是我刚找到的资料,正在奋力吸收……[em05]

  Quote:
扩展int13h调用详解  
作者:不详·发布日期:2002-12-17·阅读次数:16100
--------------------------------------------------------------------------------
转载自:BBS 水木清华站 (Sat Nov 20 16:12:06 1999)

    第一部分  简  介

1,1

一. 硬盘结构简介

  1. 硬盘参数释疑

    到目前为止, 人们常说的硬盘参数还是古老的 CHS (Cylinder/
Head/Sector)参数. 那么为什么要使用这些参数, 它们的意义是什么?
它们的取值范围是什么?
    很久以前, 硬盘的容量还非常小的时候, 人们采用与软盘类似的结
构生产硬盘. 也就是硬盘盘片的每一条磁道都具有相同的扇区数. 由此
产生了所谓的3D参数 (Disk Geometry). 既磁头数(Heads), 柱面数
(Cylinders), 扇区数(Sectors),以及相应的寻址方式.

    其中:

    磁头数(Heads) 表示硬盘总共有几个磁头,也就是有几面盘片, 最大
为 255 (用 8 个二进制位存储);
    柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道, 最大为 1023
(用 10 个二进制位存储);
    扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为 63 (用 6
个二进制位存储).
    每个扇区一般是 512个字节, 理论上讲这不是必须的, 但好象没有取
别的值的.

    所以磁盘最大容量为:

    255 * 1023 * 63 * 512 / 1048576 = 8024 GB ( 1M = 1048576 Bytes )
或硬盘厂商常用的单位:
    255 * 1023 * 63 * 512 / 1000000 = 8414 GB ( 1M = 1000000 Bytes )

    在 CHS 寻址方式中, 磁头, 柱面, 扇区的取值范围分别为 0 到 Heads - 1,
0 到 Cylinders - 1, 1 到 Sectors (注意是从 1 开始).

  2. 基本 Int 13H 调用简介

    BIOS Int 13H 调用是 BIOS 提供的磁盘基本输入输出中断调用, 它可以
完成磁盘(包括硬盘和软盘)的复位, 读写, 校验, 定位, 诊断, 格式化等功能.
它使用的就是 CHS 寻址方式, 因此最大识能访问 8 GB 左右的硬盘 ( 本文中
如不作特殊说明, 均以 1M = 1048576 字节为单位).

  3. 现代硬盘结构简介

    在老式硬盘中, 由于每个磁道的扇区数相等, 所以外道的记录密度要远低
于内道, 因此会浪费很多磁盘空间 (与软盘一样). 为了解决这一问题, 进一
步提高硬盘容量, 人们改用等密度结构生产硬盘. 也就是说, 外圈磁道的扇区
比内圈磁道多. 采用这种结构后, 硬盘不再具有实际的3D参数, 寻址方式也改
为线性寻址, 即以扇区为单位进行寻址.
    为了与使用3D寻址的老软件兼容 (如使用BIOS Int13H接口的软件), 在硬
盘控制器内部安装了一个地址翻译器, 由它负责将老式3D参数翻译成新的线性
参数. 这也是为什么现在硬盘的3D参数可以有多种选择的原因 (不同的工作模
式, 对应不同的3D参数, 如 LBA, LARGE, NORMAL).

  4. 扩展 Int 13H 简介

    虽然现代硬盘都已经采用了线性寻址, 但是由于基本 Int 13H 的制约, 使
用 BIOS Int 13H 接口的程序, 如 DOS 等还只能访问 8 G 以内的硬盘空间.
为了打破这一限制, Microsoft 等几家公司制定了扩展 Int 13H 标准
(Extended Int13H), 采用线性寻址方式存取硬盘, 所以突破了 8 G 的限制,
而且还加入了对可拆卸介质 (如活动硬盘) 的支持.

二. Boot Sector 结构简介

  1. Boot Sector 的组成

    Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (Master Boot Record),
DPT (Disk Partition Table) 和 Boot Record ID  三部分组成.

    MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),
存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序).
    DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD), 记录了磁盘的基本分区
信息. 主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息
(因此最多可以有四个主分区).
    Boot Record ID 即引导区标记占用两个字节 (0x1FE and 0x1FF), 对于合法
引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
    Boot Sector 的具体结构如下图所示 (参见 NightOwl 大侠的文章):

      0000  |------------------------------------------------|
            |                                                |
            |                                                |
            |             Master Boot Record                 |
            |                                                |
            |                                                |
            |             主引导记录(446字节)                |
            |                                                |
            |                                                |
            |                                                |
      01BD  |                                                |
      01BE  |------------------------------------------------|
            |                                                |
      01CD  |             分区信息  1(16字节)                |
      01CE  |------------------------------------------------|
            |                                                |
      01DD  |             分区信息  2(16字节)                |
      01DE  |------------------------------------------------|
            |                                                |
      01ED  |             分区信息  3(16字节)                |
      01EE  |------------------------------------------------|
            |                                                |
      01FD  |             分区信息  4(16字节)                |
            |------------------------------------------------|
            | 01FE                | 01FF                     |
            |         55          |           AA             |
            |------------------------------------------------|

  2. 分区表结构简介

    分区表由四个分区项构成, 每一项的结构如下:

    BYTE State       : 分区状态, 0 = 未激活, 0x80 = 激活 (注意此项)
    BYTE StartHead   : 分区起始磁头号
    WORD StartSC     : 分区起始扇区和柱面号, 底字节的低6位为扇区号,
                     高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
    BYTE Type        : 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,
                     00 表示此项未用
    BYTE EndHead     : 分区结束磁头号
    WORD EndSC       : 分区结束扇区和柱面号, 定义同前
    DWORD Relative   : 在线性寻址方式下的分区相对扇区地址
                       (对于基本分区即为绝对地址)
    DWORD Sectors    : 分区大小 (总扇区数)

    注意: 在 DOS / Windows 系统下, 基本分区必须以柱面为单位划分
( Sectors * Heads 个扇区), 如对于 CHS 为 764/255/63 的硬盘, 分区的
最小尺寸为  255 * 63 * 512 / 1048576 = 7.844 MB.

  3. 扩展分区简介

    由于主分区表中只能分四个分区, 无法满足需求, 因此设计了一种扩展
分区格式. 基本上说, 扩展分区的信息是以链表形式存放的, 但也有一些特
别的地方.
    首先, 主分区表中要有一个基本扩展分区项, 所有扩展分区都隶属于它,
也就是说其他所有扩展分区的空间都必须包括在这个基本扩展分区中. 对于
DOS / Windows 来说, 扩展分区的类型为 0x05.
    除基本扩展分区以外的其他所有扩展分区则以链表的形式级联存放, 后
一个扩展分区的数据项记录在前一个扩展分区的分区表中, 但两个扩展分区
的空间并不重叠.
    扩展分区类似于一个完整的硬盘, 必须进一步分区才能使用. 但每个扩
展分区中只能存在一个其他分区. 此分区在 DOS/Windows 环境中即为逻辑盘.
因此每一个扩展分区的分区表 (同样存储在扩展分区的第一个扇区中)中最多
只能有两个分区数据项(包括下一个扩展分区的数据项).
    扩展分区和逻辑盘的示意图如下:

  |-----------------------|             --------
  | 主扩展分区(/dev/hda2) |                    ^
  |-----------------------|                    |
  |  扩  展  |  分区项 1  |--\                 |
  |          |------------|  |                 |
  |  分区表  |  分区项 2  |--+--\              |
  |-----------------------|  |  |              |
  |                       |  |  |              |
  | 逻辑盘 1 (/dev/hda5)  |<-/  |              |
  |                       |     |              |
  |-----------------------|     |             主
  |      扩展分区 2       |<----/
  |-----------------------|                   扩
  |  扩  展  |  分区项 1  |--\
  |          |------------|  |                展
  |  分区表  |  分区项 2  |--+--\
  |-----------------------|  |  |             分
  |                       |  |  |
  | 逻辑盘 2 (/dev/hda6)  |<-/  |             区
  |                       |     |              |
  |-----------------------|     |              |
  |      扩展分区 3       |<----/              |
  |-----------------------|                    |
  |  扩  展  |  分区项 1  |--\                 |
  |          |------------|  |                 |
  |  分区表  |  分区项 2  |  |                 |
  |-----------------------|  |                 |
  |                       |  |                 |
  | 逻辑盘 3 (/dev/hda7)  |<-/                 |
  |                       |                    |

  |-----------------------|            ---------


三. 系统启动过程简介

    系统启动过程主要由一下几步组成(以硬盘启动为例):

    1. 开机 :-)
    2. BIOS 加电自检 ( Power On Self Test -- POST )
       内存地址为 0ffff:0000
    3. 将硬盘第一个扇区 (0头0道1扇区, 也就是Boot Sector)
       读入内存地址 0000:7c00 处.
    4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于
       则转去尝试其他启动介质, 如果没有其他启动介质则显示
       "No ROM BASIC" 然后死机.
    5. 跳转到 0000:7c00 处执行 MBR 中的程序.
    6. MBR 首先将自己复制到 0000:0600 处, 然后继续执行.
    7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动
       分区或有不止一个活动分区, 则转停止.
    8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处.
    9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则

       显示 "Missing Operating System" 然后停止, 或尝试
       软盘启动.
    10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
    11. 启动系统 ...

    以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10
步由MBR中的引导程序完成.

    一般多系统引导程序 (如 SmartFDISK, BootStar, PQBoot 等)
都是将标准主引导记录替换成自己的引导程序, 在运行系统启动程序
之前让用户选择要启动的分区.
    而某些系统自带的多系统引导程序 (如 lilo, NT Loader 等)
则可以将自己的引导程序放在系统所处分区的第一个扇区中, 在 Linux
中即为 SuperBlock (其实 SuperBlock 是两个扇区).

    注: 以上各步骤中使用的是标准 MBR, 其他多系统引导程序的引导
过程与此不同.





从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。
2004-7-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (123693086)  编辑帖子  回复  引用回复
TurboY
中级用户

绝不写垃圾帖


积分 322
发帖 99
注册 2004-7-3
来自 湖北
状态 离线
『第 6 楼』:  扩展 Int13H 技术资料

继续……[em06]

  Quote:
    第二部分 技术资料

第一章 扩展 Int13H 技术资料

一. 简介
    设计扩展 Int13H 接口的目的是为了扩展 BIOS 的功能, 使其支持
多于1024柱面的硬盘, 以及可移动介质的琐定, 解锁及弹出等功能.

二. 数据结构

1. 数据类型约定
    BYTE    1 字节整型 (  8 位 )
    WORD    2 字节整型 ( 16 位 )
    DWORD   4 字节整型 ( 32 位 )
    QWORD   8 字节整型 ( 64 位 )

2. 磁盘地址数据包 Disk Address Packet (DAP)
    DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾
越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.
    DAP 的结构如下:

    struct DiskAddressPacket
    {
        BYTE PacketSize;     // 数据包尺寸(16字节)
        BYTE Reserved;       // ==0
        WORD BlockCount;     // 要传输的数据块个数(以扇区为单位)
        DWORD BufferAddr;    // 传输缓冲地址(segment:offset)
        QWORD BlockNum;      // 磁盘起始绝对块地址
    };

    PacketSize 保存了 DAP 结构的尺寸, 以便将来对其进行扩充. 在
目前使用的扩展 Int13H 版本中 PacketSize 恒等于 16. 如果它小于
16, 扩展 Int13H 将返回错误码( AH=01, CF=1 ).
    BlockCount 对于输入来说是需要传输的数据块总数, 对于输出来说
是实际传输的数据块个数. BlockCount = 0 表示不传输任何数据块.
    BufferAddr 是传输数据缓冲区的 32 位地址 (段地址:偏移量). 数据
缓冲区必须位于常规内存以内(1M).
    BlockNum 表示的是从磁盘开始算起的绝对块地址(以扇区为单位),
与分区无关. 第一个块地址为 0. 一般来说, BlockNum 与 CHS 地址的关系
是:
    BlockNum = cylinder * NumberOfHeads +
               head * SectorsPerTrack +
               sector - 1;

    其中 cylinder, head, sector 是 CHS 地址, NumberOfHeads 是磁盘
的磁头数, SectorsPerTrack 是磁盘每磁道的扇区数.
    也就是说 BlockNum 是沿着 扇区->磁道->柱面 的顺序记数的. 这一顺
序是由磁盘控制器虚拟的, 磁盘表面数据块的实际排列顺序可能与此不同
(如为了提高磁盘速度而设置的间隔因子将会打乱扇区的排列顺序).

3. 驱动器参数数据包 Drive Parameters Packet
   驱动器参数数据包是在扩展 Int13H 的取得驱动器参数子功能调用中
使用的数据包. 格式如下:
    struct DriveParametersPacket
    {
        WORD InfoSize;          // 数据包尺寸 (26 字节)
        WORD Flags;             // 信息标志
        DWORD Cylinders;        // 磁盘柱面数
        DWORD Heads;            // 磁盘磁头数
        DWORD SectorsPerTrack;  // 每磁道扇区数
        QWORD Sectors;          // 磁盘总扇区数
        WORD SectorSize;        // 扇区尺寸 (以字节为单位)
    };
    信息标志用于返回磁盘的附加信息, 每一位的定义如下:

    0 位:
        0 = 可能发生 DMA 边界错误
        1 = DMA 边界错误将被透明处理
        如果这位置 1, 表示 BIOS 将自动处理 DMA 边界错误, 也就是说
        错误代码 09H 永远也不会出现.

    1 位:
        0 = 未提供 CHS 信息
        1 = CHS 信息合法
        如果块设备的传统 CHS 几何信息不适当的话, 该位将置 0.

    2 位:
        0 = 驱动器不可移动
        1 = 驱动器可移动

    3 位: 表示该驱动器是否支持写入时校验.

    4 位:
        0 = 驱动器不具备介质更换检测线
        1 = 驱动器具备介质更换检测线


    5 位:
        0 = 驱动器不可锁定
        1 = 驱动器可以锁定
        要存取驱动器号大于 0x80 的可移动驱动器, 该位必须置 1
        (某些驱动器号为 0 到 0x7F 的设备也需要置位)

    6 位:
        0 = CHS 值是当前存储介质的值 (仅对于可移动介质), 如果
        驱动器中有存储介质, CHS 值将被返回.
        1 = CHS 值是驱动器支持的最大值 (此时驱动器中没有介质).

    7 - 15 位: 保留, 必须置 0.

三. 接口规范

1. 寄存器约定
    在扩展 Int13H 调用中一般使用如下寄存器约定:

    ds:di ==> 磁盘地址数据包( disk address packet )
    dl    ==> 驱动器号
    ah    ==> 功能代码 / 返回码

    在基本 Int13H 调用中, 0 - 0x7F 之间的驱动器号代表可移动驱动器
0x80 - 0xFF 之间的驱动器号代表固定驱动器. 但在扩展 Int13H 调用中
0x80 - 0xFF 之间还包括一些新出现的可移动驱动器, 比如活动硬盘等.
这些驱动器支持先进的锁定,解锁等功能.
    ah 返回的错误码除了标准 Int13H 调用规定的基本错误码以外,又增加
了以下错误码:

   B0h   驱动器中的介质未被锁定

   B1h   驱动器中的介质已经锁定

   B2h   介质是可移动的

   B3h   介质正在被使用

   B4h   锁定记数溢出

   B5h   合法的弹出请求失败

2. API 子集介绍
   1.x 版的扩展 Int13H 调用中规定了两个主要的 API 子集.

   第一个子集提供了访问大硬盘所必须的功能, 包括 检查扩展 In13H
是否存在( 41h ), 扩展读( 42h ), 扩展写( 43h ), 校验扇区( 44h ),
扩展定位( 47h ) 和 取得驱动器参数( 48h ).
   第二个子集提供了对软件控制驱动器锁定和弹出的支持, 包括 检查扩展
Int13H 是否存在( 41h ), 锁定/解锁驱动器( 45h ), 弹出驱动器( 46h ),
取得驱动器参数( 48h ), 取得扩展驱动器改变状态( 49h ), int 15h.
   如果使用了调用规范中不支持的功能, BIOS 将返回错误码 ah = 01h,
CF = 1.

3. API 详解

1) 检验扩展功能是否存在
入口:
    AH = 41h
    BX = 55AAh
    DL = 驱动器号

返回:
    CF = 0
       AH = 扩展功能的主版本号
       AL = 内部使用
       BX = AA55h
       CX = API 子集支持位图
    CF = 1
       AH = 错误码 01h, 无效命令

    这个调用检验对特定的驱动器是否存在扩展功能. 如果进位标志置 1
则此驱动器不支持扩展功能. 如果进位标志为 0, 同时 BX = AA55h, 则
存在扩展功能. 此时 CX 的 0 位表示是否支持第一个子集, 1位表示是否
支持第二个子集.
    对于 1.x 版的扩展 Int13H 来说, 主版本号 AH = 1. AL 是副版本号,
但这仅限于 BIOS 内部使用, 任何软件不得检查 AL 的值.

2) 扩展读
入口:
    AH = 42h
    DL = 驱动器号
    DS:DI = 磁盘地址数据包(Disk Address Packet)

返回:
    CF = 0, AH = 0 成功
    CF = 1, AH = 错误码

    这个调用将磁盘上的数据读入内存. 如果出现错误, DAP 的 BlockCount
项中则记录了出错前实际读取的数据块个数.

3) 扩展写
入口:
    AH = 43h
    AL
       0 位 = 0 关闭写校验
              1 打开写校验
       1 - 7 位保留, 置 0
    DL = 驱动器号
    DS:DI = 磁盘地址数据包(DAP)
返回:
    CF = 0, AH = 0 成功
    CF = 1, AH = 错误码

    这个调用将内存中的数据写入磁盘. 如果打开了写校验选项, 但 BIOS
不支持, 则会返回错误码 AH = 01h, CF = 1. 功能 48h 可以检测BIOS是否
支持写校验.
    如果出现错误, DAP 的 BlockCount 项中则记录了出错前实际写入的数
据块个数.

4) 校验扇区
入口:
    AH = 44h
    DL = 驱动器号
    DS:DI = 磁盘地址数据包(Disk Address Packet)

返回:
    CF = 0, AH = 0 成功
    CF = 1, AH = 错误码


    这个调用校验磁盘数据, 但并不将数据读入内存.如果出现错误, DAP 的
BlockCount 项中则记录了出错前实际校验的数据块个数.

5) 锁定/解锁驱动器
入口:
    AH = 45h
    AL
        = 0 锁定驱动器
        = 1 驱动器解锁
        = 02 返回锁定/解锁状态
        = 03h-FFh - 保留
    DL = 驱动器号

返回:
    CF = 0, AH = 0 成功
    CF = 1, AH = 错误码

    这个调用用来缩定指定驱动器中的介质.
    所有标号大于等于 0x80 的可移动驱动器必须支持这个功能. 如果
在支持可移动驱动器控制功能子集的固定驱动器上使用这个功能调用, 将
会成功返回.
    驱动器必须支持最大255次锁定, 在所有锁定被解锁之前, 不能在物理上
将驱动器解锁. 解锁一个未锁定的驱动器,将返回错误码 AH= B0h. 如果锁定一
个已锁定了255次的驱动器, 将返回错误码 AH = B4h.
    锁定一个没有介质的驱动器是合法的.

6) 弹出可移动驱动器中的介质
入口:
    AH = 46h
    AL = 0 保留
    DL = 驱动器号

返回:
    CF = 0, AH = 0 成功
    CF = 1, AH = 错误码

    这个调用用来弹出指定的可移动驱动器中的介质.
    所有标号大于等于 0x80 的可移动驱动器必须支持这个功能. 如果
在支持可移动驱动器控制功能子集的固定驱动器上使用这个功能调用, 将
会返回错误码 AH = B2h (介质不可移动). 如果试图弹出一个被锁定的介质
将返回错误码 AH = B1h (介质被锁定).
    如果试图弹出一个没有介质的驱动器, 则返回错误码 Ah = 31h (驱动器
中没有介质).
    如果试图弹出一个未锁定的可移动驱动器中的介质, Int13h会调用 Int15h
(AH = 52h) 来检查弹出请求能否执行. 如果弹出请求被拒绝则返回错误码(同
Int15h). 如果弹出请求被接受,但出现了其他错误, 则返回错误码 AH = B5h.

7) 扩展定位
入口:
    AH = 47h
    DL = 驱动器号
    DS:DI = 磁盘地址数据包(Disk Address Packet)

返回:
    CF = 0, AH = 0 成功
    CF = 1, AH = 错误码

    这个调用将磁头定位到指定扇区.

8) 取得驱动器参数
入口:
    AH = 48h
    DL = 驱动器号
    DS:DI = 返回数据缓冲区地址

返回:
    CF = 0, AH = 0 成功
        DS:DI 驱动器参数数据包地址, (参见前面的文章)
    CF = 1, AH = 错误码

    这个调用返回指定驱动器的参数.

9) 取得扩展驱动器介质更换检测线状态
入口:
    AH = 49h
    DL = 驱动器号

返回:
    CF = 0, AH = 0  介质未更换
    CF = 1, AH = 06h 介质可能已更换

    这个调用返回指定驱动器的介质更换状态.
    这个调用与 Int13h AH = 16h 子功能调用相同, 只是允许任何驱动器
标号. 如果对一台支持可移动介质功能子集的固定驱动器使用此功能,则永远
返回 CF = 0, AH = 0.
    简单地将可移动介质锁定再解锁就可以激活检测线, 而无须真正更换介质.

10) Int 15h 可移动介质弹出支持
入口:
    AH = 52h
    DL = 驱动器号
返回:
    CF = 0, AH = 0 弹出请求可能可以执行
    CF = 1, AH = 错误码 B1h 或 B3h  弹出请求不能执行

    这个调用是由 Int13h AH=46h 弹出介质功能调用内部使用的.





从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。
2004-7-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (123693086)  编辑帖子  回复  引用回复
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 7 楼』:  

呵呵,不错
建议版主整理一下,放到精华区里

2004-7-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
walu
高级用户




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

“就是划出一个分区(末分区)来单独保存系统备份,在备份完成后将此分区隐藏,即分区ID改为1BH。这样客户的操作系统启动后怎么也看不到备份盘了,这就避免了备份被删除的尴尬--当然那些客户会用FDISK也就不用费这个脑筋了。用我们的系统恢复盘启动时,这个备份分区又可见了,一切就和没有隐藏一样,可以恢复也可以更新备份。这样不就方便、安全多了。”

如果仅这样的话,IBM的F11一键恢复可以实现;另外GHOST8.0支持将系统备份至隐藏分区中,同样起到保护作用。

不过作者的“如何能在DOS中让隐藏分区可见(可读、可写)”能实现最好了,精神上纯支持你(因为本人不会)。

2004-7-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gotomsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 9 楼』:  

请教一个问题?
在WINDOWS中,用优化大师检测我硬盘为16磁头,在DOS下,用工具检测为:LBA和CHS两种方式的结果不一样,16磁头 和255磁头,这只能是最大磁头数吧?
那怎样才能知道硬盘真实磁头数? 编号为 maxtor 32049h2 网上查不到此类编号




[此贴子已经被作者于2004-7-8 上午 11:10:19编辑过]




2004-7-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 10 楼』:  

其实就为了那么些喜欢自作聪明的人而去隐藏分区实在是没有意义,如果真要去想出一个“方法”来的话,还不如用更加简便易行的方法,而不是去想方设法地隐藏分区。比如说随机配一个备份光盘,这样就不会被那些自作聪明的人删掉了。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2004-7-8 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
TurboY
中级用户

绝不写垃圾帖


积分 322
发帖 99
注册 2004-7-3
来自 湖北
状态 离线
『第 11 楼』:  

的确可以配带有备份文件的光盘。但兼容机不同于品牌机,每台机器的配置可能都不同,操作系统备份也会不同,这样很难批量制作光盘(我并不看好那些“万能Ghost”文件)。所以现在的办法只能是在装机时接上外置刻录机,把备份现场刻成光盘--这么做,用户就不能更新备份了。也许这是最好的方法,我们只能保证恢复到出厂状态嘛!
    我想的是一种思路,可能我实现不了,但毕竟可能会有人可以做出来,这就造福大家了。



从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。
2004-7-8 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (123693086)  编辑帖子  回复  引用回复
wangsea
中级用户




积分 445
发帖 110
注册 2004-5-28
状态 离线
『第 12 楼』:  

我最讨厌在分区表内做手脚。
能不经分表启动的都是我喜欢的。所以我喜欢NT的loader,喜欢grub for dos。


2004-7-8 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
TurboY
中级用户

绝不写垃圾帖


积分 322
发帖 99
注册 2004-7-3
来自 湖北
状态 离线
『第 13 楼』:  

“我最讨厌在分区表内做手脚。”
不是要经分区表启动,程序完全不改动硬盘的分区表。我的思路是在启动软盘的引导区写程序并先启动,向后来启动的DOS把隐藏分区虚报成普通分区罢了--只读一次硬盘分区表,不改写。



从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。
2004-7-9 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (123693086)  编辑帖子  回复  引用回复
jyssysz
中级用户




积分 343
发帖 50
注册 2004-2-21
状态 离线
『第 14 楼』:  

期待有新的进展。

2004-7-9 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangsea
中级用户




积分 445
发帖 110
注册 2004-5-28
状态 离线
『第 15 楼』:  

不是要经分区表启动,程序完全不改动硬盘的分区表。我的思路是在启动软盘的引导区写程序并先启动,向后来启动的DOS把隐藏分区虚报成普通分区罢了--只读一次硬盘分区表,不改写。
-------------------------------------------------------------------------------------------------------------------------
那还麻烦什么?格盘装系统时用pqmagic将备份分区隐藏,恢复时用gosho8直接读隐成分区中的映象恢复就成了呀.........................

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


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



论坛跳转: