以下是引用不点在2004-5-5 17:03:36的发言:
windrv兄:短信只有 500 字符的空间,所以在这里回复。
> Hello!
> How is your help?
嗯,我还在治疗。真的有些惊喜,我可能会基本恢复健康的。不过,大的方针不改变,只做一些小的事情,而有难度的开发不介入。谢谢你和bean兄在严峻时期所给予的帮助,你们的帮助起了决定性的作用(身体+心理——两方面导致的疾病)。
> You did a great job on GRUB For DOS.
> It can map a particular hd to a virtual image and boot it.
>
> Could I know whether it can be done under DOS to prevent the access of a particular HD by DOS
> completely and restore its access by running a DOS program? Grub.exe seems needing rebooting.
如果要在一个运行中的(活动的) DOS 下来仿真某个磁盘,或许会出现意外(例如死机)。然而如果仅仅是阻止某个磁盘,或许是可以的。但是,应当考虑到,C: 盘也处于活动状态,例如 Command.com 的常驻部分在内存,而暂驻部分在硬盘。这种情况必须考虑到。或许可以通过改变 COMSPEC 环境变量而加以解决。当然了,如果一个磁盘不被内存中的进程所访问,这样的磁盘是可以禁用的【我初步这么认为】。
grub 的仿真代码可以用于上述这种动态仿真的情况【甚至也包括增加虚拟硬盘等等看似危险的操作】。禁用一个硬盘,只是仿真的一个特例。map --disable-chs-mode --disable-lba-mode (hd1) (hd1) 就禁用了 (hd1)
你甚至完全可以离开 GRUB 而直接在 DOS 中操作。GRUB 所做的,无非也就是在常规内存顶部用 2K 的空间作为 int13 的代码。map 的命令行参数【也放在上述的 2K 区域】,都可以在 DOS 下透明地修改。所以,你想禁止或开启,都是很简单的。
大致有这些问题可能需要注意:
1。BIOS 数据区含有硬盘总数以及软盘总数,最好能够反应真实的变化。
2。在增加 2K 的 GRUB 仿真代码时,常规内存 0x040e 和 0x0413 处的值需要改动。撤除代码也需要更改这两个值。当然了,如果只是修改 2K 代码尾部的 map 命令行参数,则不需要修改这两处的值。
3。当拷贝 2K 的 GRUB 代码到常规内存顶部时,注意不要覆盖了此处的 TSR,也不要毁掉了扩展 BIOS 数据区。除此之外,还得修改内存分配链(也就是arena结构),保证内存链分配的完整性,否则系统会死掉,或者不稳定。
大致能够想到的,也就这些吧。
|
|