修改Windows的MBR

2023-11-24

我需要修改 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(使用前将#替换为@)

修改Windows的MBR 的相关文章

  • 通过 PsExec 在远程计算机中执行批处理文件

    我正在尝试通过 PSExec 在远程 PC 上运行批处理文件 在批处理文件中我刚刚编写了 记事本 下面的 psexec 命令在我的笔记本电脑上运行 但无法在远程 PC 上执行任何操作 我什至没有看到 记事本 在远程计算机的进程列表上运行 c
  • WMI 不返回 Windows 7 64 上的所有安装程序

    今天 我们尝试使用以下脚本列出每个虚拟机上所有已安装的程序来查询 WMI 我们发现它会列出所有 64 位应用程序 以及一些 32 位应用程序 但并非所有应用程序 32 位 64 位 都会列出 param string ExportPath
  • 在VB.net中动态添加用户控件

    我在 Vb net Windows 应用程序 中制作了自定义 UserControl 如何将其动态添加到表单中 UserControl 本质上只是另一个类 它继承自 Control 因此您可以使用控件执行各种操作 但除此之外它只是一个类 因
  • 在 Windows 上使用“perl6”命令和 Git Bash

    使用 Windows 我安装了乐道之星 https rakudo org files和 Git 并确保C rakudo bin and C rakudo share perl6 site bin位于我的 Path 环境变量中 现在 输入pe
  • 无法在 cmd 中通过管道传递 cmdlet 对象

    我正在使用这个 powershell 命令来获取特定的用户配置文件 获取 WmiObject Class Win32 UserProfile Where Object LocalPath eq C Users Pela 但是当我通过调用 p
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • TCHAR 仍然相关吗?

    我是 Windows 编程新手 在读完 Petzold 的书后 我想知道 使用TCHAR类型和 T 函数来声明字符串或者我应该使用wchar t and L 新代码中的字符串 我将仅针对现代 Windows 截至撰写本文时版本 10 和 1
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 如何使用批处理文件创建 EXE 可执行文件? [复制]

    这个问题在这里已经有答案了 我希望能够简单地运行 Windows 批处理文件并让它创建 exe 可执行文件 我知道您可以使用以下脚本批量创建文件 echo off echo This will be in a text file gt gt
  • 如何以编程方式清除 Kerberos 票证缓存

    有谁知道如何使用托管 非托管代码清除本地计算机上的 Kerberos 票证缓存 提前致谢 我相信你需要打电话给LsaCa llAuthentication包 http msdn microsoft com en us library aa3
  • 从 Powershell 更新计划任务脚本

    我正在尝试编写一个每天运行一次的 Powershell 脚本 它将执行的众多功能之一是确保脚本本身是最新的 我的问题是 由于我对脚本进行了版本控制 因此我需要更新从脚本中创建的计划任务 我在这里考虑了两种不同的方法 其中我也无法弄清楚 我最
  • 如何从笔记本电脑检测电源按钮事件并在 Windows 7 上拒绝它

    在 Windows XP 上 我可以在按下笔记本电脑的电源按钮时检测到事件 获取APMQUERYSUSPEND事件的条件是 控制面板 gt 电源选项 gt 系统设置 gt 按下电源按钮时 gt 睡眠 选项必须更改为 睡眠 MainFrm O
  • 如何通过批处理文件打开Windows防火墙上的端口

    有没有办法在批处理文件中通过批处理文件打开 Windows 上的特定端口 如果让安装程序为我们的服务器应用程序执行此操作 而不是让用户手动执行此操作 那就太好了 Use 执行程序 http technet microsoft com en
  • 将目录添加到path环境变量

    我的要求是将目录之一添加到path安装我的应用程序时 Windows 中的环境变量并将其删除path使用批处理文件卸载时的环境变量 在与此相关的 stackoverflow 答案之一中 建议将目录添加到路径环境变量中 setx path C
  • WinVerifyTrust 检查特定签名?

    我正在为 Windows 实现一个进程提升助手 该程序将以提升模式运行并以管理员权限启动其他程序 而不会显示其他 UAC 提示 出于安全原因 我想确保只有使用我公司的 Authenticode 密钥进行数字签名的二进制文件才能执行 The
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 如何在Windows 7中使用批处理脚本获取本地连接名称

    我正在编写一个简单的批处理脚本来检索 Windows 上的所有网络接口 但我只需要本地连接名称 本地连接接口名称不是默认名称 有没有办法使用批处理脚本仅检索本地连接名称作为字符串 不完全确定您在问什么 但我认为您的问题是您想要获取网络接口的
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 获取文件夹及其子文件夹中最长文件路径的长度

    我正在寻找一个可以从命令行 批处理 PowerShell 运行的脚本 该脚本将遍历文件夹及其子文件夹 并返回一个数字 该数字是最长文件路径的长度 我已经看到了一些批处理和 PowerShell 脚本 例如 如何在 Windows 中查找路径
  • PE 文件中的跳转存根

    最近我反汇编了一个DLL 用c c 编写 发现代码段内有很多 跳转存根 这些存根除了跳转到 DLL 内的函数之外什么也不做 eg jmp foo jmp foo2 为什么编译器 Visual studio 2012 在二进制文件中包含这些函

随机推荐

  • 为什么在 PHP 中使用“use”关键字来导入核心标识符?

    有时在一些图书馆 比如thephpleague csv 我看到use关键字来导入核心标识符 例如函数 类或常量 但我根本不明白为什么要导入它们 请参见以下示例 use Generator use SplFileObject use func
  • 谷歌云存储加入多个csv文件

    我将数据集从 Google BigQuery 导出到 Google Cloud Storage 考虑到文件大小 BigQuery 将文件导出为 99 个 csv 文件 然而 现在我想连接到我的 GCP 存储桶并使用 Spark 执行一些分析
  • 即使使用 nohup 子进程也会被杀死

    我在用着subprocess Popen启动多个进程 代码是这样的 while flag gt 0 flag check flag c MyClass num process 10 c launch MyClass如果类似以下内容 MyCl
  • Android MediaMetadataRetriever 从大多数键返回空值

    我想从我的媒体文件 主要是 mp3 中获取信息 但我从我想要的那些值中只得到 null 我已经尝试过所有按键extractMetadata key 我是否跳过 遗漏了某些内容 代码依据 MediaMetadataRetriever f ne
  • 为什么不能对函数的返回值使用数组索引? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 为什么我不能这样做 explode 1 2 3 1 0 所有其他语言都支持它 我
  • rm、cp、mv 命令的参数列表太长错误

    我在 UNIX 的一个目录下有数百个 PDF PDF 的名称非常长 大约 60 个字符 当我尝试使用以下命令一起删除所有 PDF 时 rm f pdf 我收到以下错误 bin rm cannot execute Argument list
  • 如何从 flutter 中的数据快照获取特定值?

    我有这个数据快照 post1 pic https i redd it ni6zhxh874011 jpg title title desc desc post2 pic https i redd it krj9miojg5011 jpg t
  • Firebase 倒计时器在多个客户端之间同步

    我将尝试使用 Angular JS 为特定的利基市场构建一个便士拍卖网站 我正在尝试计划倒计时器 并且我一直渴望尝试一下 firebase 我昨天有一个想法 让每次拍卖在实际数据库中都有一个倒计时 因为通过 2 路数据绑定 人们的客户端将始
  • Xcode 4 和 Interface Builder:编辑垂直间距约束(锚定顶部,而不是底部)

    我有一个小部件在设备上未正确布局 其looks在 IB 中还可以 但不太正确 该小部件是一个标签 位于屏幕中间 Interface Builder 为其提供了带有 底部锚点 的垂直空间约束 在这里 底部意味着屏幕的底部 而不是下面的小部件
  • jQuery 自动完成(远程)- 示例

    我真的希望避免发布新问题 但我找不到 jQuery 自动完成远程功能的功能示例 其中包括调用页面和 搜索 页面 jQueryUI 演示和文档 部分不包含 search php 的源代码 我尝试了数十种组合 但这是我开始的组合
  • 什么是&=和|=

    我正在查看大型代码库中的一些 VC 代码 并发现了以下内容 if nState TOOL TIPS VISIBLE nState TOOL TIPS VISIBLE else nState TOOL TIPS VISIBLE break C
  • 是否有键盘快捷键可以浏览 Jupyter 笔记本中的历史记录

    有没有一种简单的方法可以浏览命令历史记录并在 Jupyter 笔记本中重用旧命令 有些相当于 iPython 控制台中使用的向上 向下箭头或 Mathematica 中使用的 符号 虽然对于专家来说答案可能看起来微不足道 但对于新手来说确实
  • PHP计算目录和子目录中的文件总数函数

    我需要获取指定目录中 JPG 文件的总数 包括其所有子目录 没有子子目录 结构如下 dir1 2 files subdir 1 8 files total dir1 10 个文件 dir2 5 files subdir 1 2 files
  • 多线程还是尽可能少的线程?

    作为一个业余项目 我目前正在为我曾经玩过的一款古老游戏编写服务器 我试图使服务器尽可能松散耦合 但我想知道对于多线程来说什么是好的设计决策 目前我有以下操作顺序 启动 创建 gt 服务器 监听客户端 创建 gt 客户端 监听命令并发送周期数
  • 如何使用用户的默认电子邮件客户端弹出撰写/创建邮件对话框?

    用例很简单 在某个时间点 我需要能够向用户展示他熟悉的撰写电子邮件对话框 Outlook 或其他 发件人 收件人 主题 等字段已填充了某些应用程序确定的值 该电子邮件还会附带一个附件 除非用户明确同意 否则不应发送邮件 我在 VB6 时代做
  • LINQ 中的升序/降序 - 可以通过参数更改顺序吗?

    我有一个给出参数 bool sortAscending 的方法 现在我想使用 LINQ 根据此参数创建排序列表 然后我得到了这个 var ascendingQuery from data in dataList orderby data P
  • c++ 从 hbitmap 获取原始像素数据

    我对使用 p invoke 调用相当陌生 想知道是否有人可以指导我如何从 hbitmap 检索原始像素数据 unsigned char 这是我的场景 我正在加载一个 NET 位图对象在C 侧并将其 IntPtr 发送到我的非托管 C 方法
  • 如何模拟用 jest.mock 模拟的类的实例方法?

    如何模拟正在模拟的类的实例方法jest mock 例如 一个类Logger被嘲笑 import Person from Person import Logger from Logger jest mock Logger describe P
  • mocha / babel 如何动态转译我的测试代码?

    我的问题不是为什么有些东西不起作用 而是为什么它起作用 是的 我有一个小NodeJS 命令行工具 其中包含 NodeJS 尚不支持开箱即用的功能 最值得注意的是 import声明 String includes 因此 为了交付 构建 我转译
  • 修改Windows的MBR

    我需要修改 Windows 的 MBR 并且我真的很想在 Windows 上执行此操作 这是我的问题 我知道我可以通过调用 CreateFile 来获取物理设备的句柄 MBR 是否始终位于 PHYSICALDRIVE0 上 另外 我仍在学习