修改Windows的MBR

修改Windows的MBR

Modifying the MBR of Windows

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

这是我的问题。我知道可以通过调用CreateFile在物理设备上获取句柄。 MBR是否始终位于\\。\ PHYSICALDRIVE0上?另外,我仍在学习Windows API以直接从磁盘读取。是我将需要使用readabsolutesectors和writeabsolutesectdors这两个函数来读写包含MBR的磁盘扇区吗?

根据自己的经验进行编辑。
MBR并不总是位于\\。\ PHYSICALDRIVE0上。另外,您可以通过使用包含MBR的驱动器的设备名称调用CreateFile来写入引导扇区(至少在XP中为Administrator)。同样,您可以通过简单地调用WriteFile并传递通过调用CreateFile创建的设备的句柄来写入此驱动器。

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

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

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


操作系统启动后,MBR通常是出于病毒原因而受到保护的,这是书中最古老的病毒技巧之一,可以追溯到使病毒从软盘传播到软盘。

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

因此,您几乎只能编写低级代码(大多数程序以汇编形式实现)或针对16位DOS的C代码。

这些程序大多数都使用BIOS接口(我相信是13h)来直接访问磁盘的扇区。您可以使用一些内联程序集或编译器提供的接口以C语言访问它们。但是,如果没有操作系统的合作,通常将无法访问BIOS,因此,您的程序将再次仅限于DOS。如果您可以访问这些磁盘,则几乎可以在家中闲逛-BIOS的好处是您不必担心系统中存在哪种类型的HD-甚至RAID卡也经常将自身插入BIOS例程中,以便可以访问它们不知道ATA或SATA控制器在内存中的位置,并在该底层执行命令。

但是,如果绝对必须在操作系统内访问它,则几乎必须编写设备驱动程序来访问BIOS或HD控制器所在的内存空间。不过,我不建议这样做,因为这非常棘手-现代计算机将HD控制器放在内存中的不同位置,具有不同的IRQ,并且每个芯片组都变得更加深奥,因为它们可以提供最小的接口到BIOS进行启动,然后再找到Windows的特定驱动程序。他们跳过了所有其他被认为与其他控制器兼容的接口,因为兼容成本更高。

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

祝好运!


修改引导程序是一个坏主意。以下是一些可能的陷阱:

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

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

1
OUT AX, BL

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


也许PXE引导方案可以为您提供帮助?只需在您制作的PXE映像上引导即可,该映像会修改您需要修改的硬件寄存器,然后将控件返回到主引导记录或活动分区的引导记录。

这样,您不必修改启动记录。


推荐阅读

    linux清空操作命令?

    linux清空操作命令?,系统,数据,命令,名称,不了,文件夹,文件,环境,回收站,目

    linux时间命令修改?

    linux时间命令修改?,时间,系统,信息,命令,大陆,国家,终端,时分,时区,日期,lin

    linux路由表修改命令?

    linux路由表修改命令?,网络,系统,地址,信息,数据,通信,发行,命令,文件,终端,

    linux修改地址命令?

    linux修改地址命令?,地址,系统,代码,网络,服务,信息,密码,命令,管理,基础,lin

    linux操作命令论文?

    linux操作命令论文?,管理,系统,设计,网络,企业,基础,机电设备,技术,发展,机

    linux内核总调用命令?

    linux内核总调用命令?,工作,地址,系统,信息,管理,策略,命令,目录,时间,基础,

    linux编程调用命令?

    linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首

    修改主机名命令linux?

    修改主机名命令linux?,系统,地址,服务,主机名,网络,情况,名称,查询系统,异

    linux修改账户的命令?

    linux修改账户的命令?,密码,系统,状态,名称,信息,用户,命令,位置,软件,管理,L

    linux操作命令cp?

    linux操作命令cp?,系统,文件,命令,源文件,基本知识,时间,目录,文件夹,选项,

    linux操作命令及用法?

    linux操作命令及用法?,工作,地址,系统,管理,信息,命令,目录,网络,文件,操作,L

    linux中修改密码命令?

    linux中修改密码命令?,密码,系统,服务,名称,软件,信息,时间,状态,命令,用户,l

    linux基础命令和操作?

    linux基础命令和操作?,工作,地址,基础,命令,管理,标准,系统,目录,单位,信息,l

    linux修改日期命令?

    linux修改日期命令?,时间,系统,命令,信息,工具,工作,服务,代码,日期,终端,lin

    linux命令窗口调用?

    linux命令窗口调用?,系统,工具,首页,终端,命令,数据,盘中,代码,密码,快捷键,

    linux中查询操作命令?

    linux中查询操作命令?,信息,系统,名称,命令,地址,数字,指令,用户,历史,文件,

    linux线程操作命令?

    linux线程操作命令?,系统,工作,时间,代码,线程,信息,第一,命令,函数,操作,lin

    查看linux操作的命令?

    查看linux操作的命令?,系统,工作,信息,情况,地址,命令,软件,电脑,第一,名称,l

    linux命令行修改字体?

    linux命令行修改字体?,系统,终端,字体,实时,适当,等级,工具,颜色,字符,窗口,l

    linux命令修改gid?

    linux命令修改gid?,系统,管理,情况,密码,代码,工具,时间,地方,数字,命令,Linu