修改Windows的MBR

我需要修改Windows的MBR,并且我真的很想从Windows执行此操作。

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

从我自己学到的东西编辑。 MBR不会总是在\\。PHYSICALDRIVE0。 另外,可以通过调用CreateFile和包含MBR的驱动器的设备名称来写入启动器(至less在XP上是Administrator)。 另外,只需调用WriteFile并传递通过调用CreateFile创build的设备的句柄即可写入该驱动器。

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

编辑Cd-MaN。 谢谢(你的)信息。 答案中没有任何东西,但我不知道,你的回答不能解决我的问题。 特别是registry绝对不会因为多种原因而做我们需要的。 最重要的原因是Windows是我们的产品中运行的多个软件层中的最高层。 这些更改需要在较低级别运行之前进行,因此registry将无法工作。

PS为Cd-MaN。 据我所知,你提供的信息是不正确的。 对于Vista,我认为如果写入的扇区是引导扇区,你可以写入一个卷。 请参阅http://support.microsoft.com/kb/942448

Solutions Collecting From Web of "修改Windows的MBR"

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

即使不受限制,也必须编写低级代码 – 它不是文件系统的一部分,但存在于硬盘上的特定位置。

由于这个原因,你几乎只能编写低级的程序(大多数程序在汇编中实现这个),或者是针对16位DOS的C代码。

大多数这些程序使用BIOS接口 (13h,我相信)直接访问磁盘的扇区。 您可以使用一些内联汇编或编译器提供的接口在C中访问它们。 但是,如果没有操作系统的配合,一般情况下不能访问BIOS,所以你的程序也会被限制在DOS下。 如果你可以访问这些,那么你几乎可以在家免费使用 – 关于BIOS的好处是你不必担心系统中的HD是什么类型 – 即使RAID卡经常插入到BIOS例程中,以便它们可以被访问而无需知道ATA或SATA控制器在内存中的位置,并在该低级别上执行命令。

但是,如果您绝对必须在操作系统中访问它,则几乎必须编写一个设备驱动程序来访问BIOS或HD控制器所在的内存空间。 但我不会推荐它,因为这很难处理 – 现代计算机把高清控制器放在内存中的不同位置,使用不同的IRQ,每个芯片组都变得更加深奥,因为它们可以提供最低限度的接口为BIOS启动,然后为Windows的特定驱动程序。 他们跳过所有其他接口的细微差别,认为兼容其他控制器,因为兼容更昂贵。

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

祝你好运!

修改引导程序是不好的,坏主意。 这里只是几个可能的问题:

  • 它可能会杀死全盘加密产品(Truecrypt,PGP,Vista的BitLocker等)
  • 它可能会绊倒AV产品(令人恐惧的用户)
  • 它可能会杀死复杂的启动场景(链式启动加载器等)
  • 它会在使用TPM模块时终止信任链(因为它在执行之前会检查MBR以进行更改)
  • 直接磁盘访问不允许从Vista开始(只使用驱动程序)

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

OUT AX, BL 

那么驱动程序存在所有版本的窗口,可以做到这一点(从/到某个端口读/写值),可以从用户模式调用。

也许PXE启动方案可以帮助你? 只需引导您制作的PXE映像,修改需要修改的硬件寄存器,然后将控制权归还给主引导记录或活动分区的引导记录。

这样你就不必修改启动记录。