修改Windows的MBR

时间:2008-09-02 13:26:43

标签: windows mbr

我需要修改Windows的MBR,我真的很想从Windows中做到这一点。

以下是我的问题。我知道我可以通过调用CreateFile来获取物理设备的句柄。 MBR会不会出现在\\。\ PHYSICALDRIVE0?另外,我还在学习Windows API直接从磁盘读取。 readabsolutesectors和writeabsolutesectdors是我需要用来读/写包含MBR的磁盘扇区的两个函数吗?

根据我自己学到的东西进行编辑。 MBR并不总是在\\。\ PHYSICALDRIVE0上。此外,您可以通过使用包含MBR的驱动器的设备名称调用CreateFile来写入引导扇区(至少作为XP上的管理员)。此外,您只需调用WriteFile并传递通过调用CreateFile创建的设备句柄即可写入此驱动器。

编辑以解决Joel Coehoorn的问题。 我需要编辑MBR,因为我正在开发一个项目,需要在BIOS中POST后修改硬件寄存器,但是在允许Windows启动之前。我们的计划是通过修改引导加载程序以在Windows启动之前执行我们的代码来进行这些更改。

编辑Cd-MaN。 谢谢(你的)信息。但是,你的答案中没有任何内容,我不知道,你的答案也没有解决我的问题。特别是注册表绝对不会出于多种原因而做我们需要的事情。最重要的原因是Windows是将与我们的产品一起运行的多个软件层中的最高层。这些更改甚至需要在较低级别运行之前发生,因此注册表将无法工作。

P.S。用于Cd-MaN。 据我了解,您提供的信息不太正确。对于Vista,我认为如果写入的扇区是引导扇区,则可以写入卷。见http://support.microsoft.com/kb/942448

3 个答案:

答案 0 :(得分:7)

一旦启动操作系统,MBR通常会因病毒原因受到保护 - 这是书中最古老的病毒技巧之一 - 可以将病毒从软盘传递到软盘。

即使它没有受到限制,您也必须编写低级代码 - 它不是文件系统的一部分,而是存在于硬盘驱动器上的特定位置。

由于这个原因,你几乎只限于编写低级别(大多数程序在程序集中实现此功能)或C代码目标为16位DOS。

这些程序中的大多数使用BIOS interface(13h,我相信)直接访问磁盘的扇区。您可以使用某些内联汇编或编译器提供的接口在C中访问它们。但是,如果没有操作系统的合作,您通常无法访问BIOS,因此您的程序将再次限制为DOS。如果你可以访问这些,你几乎可以免费上网了 - 关于BIOS的好处是你不必担心系统中的HD类型 - 甚至RAID卡经常插入BIOS例程中以便可以访问它们不知道ATA或SATA控制器在内存中的位置,并执行低级别的命令。

如果你绝对必须在操作系统中访问它,你几乎必须编写一个设备驱动程序来访问BIOS或存在HD控制器的存储空间。我不推荐它,因为这是非常棘手的 - 现代计算机将HD控制器放在内存中的不同位置,具有不同的IRQ,并且每个芯片组变得更加深奥,因为它们可以提供最小的接口到BIOS的启动,然后是Windows的特定驱动程序。它们会跳过所有其他与其他控制器兼容的界面细节,因为它兼容性更高。

您可能会发现在Windows内部的驱动程序级别,您将拥有直接访问驱动器扇区(或直接伪访问)的方法,但同样,由于上述病毒问题,它们可能会得到很好的保护。

祝你好运!

答案 1 :(得分:4)

修改引导加载程序是坏事,坏主意。以下是一些可能的问题:

  • 它可能会杀死全磁盘加密产品(Truecrypt,PGP,Vista的BitLocker等)
  • 它可能会绊倒AV产品(吓唬用户)
  • 它可能会杀死复杂的启动方案(链式启动加载器等)
  • 在使用TPM模块时它将消除信任链(因为它在执行之前检查MBR的变化)
  • 不允许从Vista(仅使用驱动程序)开始直接访问磁盘

替代方案(例如,在Windows启动期间通过设置为在启动时或Windows启动后加载的驱动程序修改硬件寄存器)应该考虑。如果修改就像写入端口一样简单,即:

OUT AX, BL

然后驱动程序存在所有版本的Window,它可以执行此操作(从/向某个端口读取/写入值),可以从用户模式调用。

答案 2 :(得分:2)

也许PXE启动方案可以帮到你?只需在您精心设计的PXE映像上启动,修改您需要修改的硬件寄存器,然后将控件返回到主启动记录或活动分区的启动记录。

这样您就不必修改引导记录了。