我需要修改 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 是与我们的产品一起运行的多个软件层中的最高层。这些更改甚至需要在较低级别运行之前进行,因此注册表将无法工作。
附:对于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 内的驱动程序级别,您将有直接(或伪直接)访问驱动器扇区的方法,但同样,由于上述病毒问题,它们可能受到很好的保护。
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)