检索 Windows Vista 及更高版本上 BootMgr 的分区号

2024-02-15

我需要将启动管理器映射到分区号:

 Manufacturer Recovery partition = Partition 0 
 Boot manager = Partition 1
 C:\ = Partition 2
 D:\ = Partition 3

对于已安装的分区,例如 C:\ 或 D:\,我使用IOCTL_STORAGE_GET_DEVICE_NUMBER http://msdn.microsoft.com/en-us/library/windows/desktop/bb968800%28v=vs.85%29.aspx检索分区号。

现在我想做类似的事情来获取 Windows 启动管理器的编号。我不能假设 BootMgr 是 100 MB 分区或系统分区的前一个分区。

我看过与磁盘几何相关的 IOCTL http://msdn.microsoft.com/en-us/library/aa363987%28v=vs.85%29.aspx但我没有发现任何有用的东西。我需要将引导管理器分区与 100 MB 制造商恢复分区区分开来。

BCDEDIT.exe 工具显示所需的信息;

Identificador           {bootmgr}
device                  partition=\Device\HarddiskVolume1
description             Windows Boot Manager
locale                  es-ES
inherit                 {globalsettings}
extendedinput           Yes
default                 {current}
resumeobject            {5586dd33-361b-11e0-8df8-0018716eb820}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30
customactions           0x1000085000001
                        0x5400000f
custom:5400000f         {1f473c8f-0c00-11e1-898d-78acc0c157a7}

我正在用 C 开发我的应用程序,因此BCDEDIT 方法意味着包含 COM/WMI http://msdn.microsoft.com/en-us/library/windows/desktop/aa362677%28v=vs.85%29.aspx依赖于我相对简单的应用程序。

请注意,我正在谈论使用通过 WMI 检索的“\Device\HarddiskVolume1”打开 BootMgr 分区的句柄,然后使用 IOCTL_STORAGE_GET_DEVICE_NUMBER:

hHandle = CreateFile ("\\\\?\\GLOBALROOT\\Device\\HarddiskVolume1", 
                        GENERIC_READ|GENERIC_WRITE,
                        FILE_SHARE_READ|FILE_SHARE_WRITE, 
                        NULL, 
                        OPEN_EXISTING, 
                        FILE_ATTRIBUTE_NORMAL,
                        NULL);

if ( hHandle != INVALID_HANDLE_VALUE )
{
    VOLUME_DISK_EXTENTS diskExtents;
    DWORD dwSize;
    BOOL iRes;

    iRes = DeviceIoControl(hHandle,
                            IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
                            NULL,
                            0,
                            (LPVOID) &diskExtents,
                            (DWORD) sizeof(diskExtents),
                            (LPDWORD) &dwSize,
                            NULL);

    if (iRes)
    {
        STORAGE_DEVICE_NUMBER deviceNumber;
        DWORD bytesReturned =  0;

        iRes = DeviceIoControl(hHandle, 
                        IOCTL_STORAGE_GET_DEVICE_NUMBER, 
                        NULL, 
                        0, 
                        &deviceNumber, 
                        sizeof(deviceNumber), 
                        &bytesReturned, NULL);

有什么更简单的解决方法的想法吗?


您可以通过查看注册表找到系统卷(Windows 启动的位置以及 bootmgr 所在的位置):HKLM\SYSTEM\Setup\SystemPartition。这将包含一个类似的名称\设备\HardDiskVolume1.

在通过 Windows 7 安装程序格式化的磁盘上,这对应于在包含驱动器 C: 的分区之前启动的 100MB 分区。在 Windows 7 上,包含驱动器 C: 的大分区是\设备\HardDiskVolume2.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索 Windows Vista 及更高版本上 BootMgr 的分区号 的相关文章

随机推荐

  • Rails 中控制器和视图中使用的辅助方法

    我知道我可以将辅助方法放入Helper类里面的helperRails 中的文件夹 那么该方法就可以在任何视图中使用 我知道我可以将方法放入ApplicationController类和该方法可以在任何控制器中使用 控制器和视图中经常使用的方
  • Caliburn EventAggregator moq 验证 PublishOnUIThreadAsync 异步方法

    我有一个事件如下 namespace MyProject public class MyEvent public MyEvent int favoriteNumber this FavoriteNumber favoriteNumber p
  • 检测iPhone / iPod的颜色[重复]

    这个问题在这里已经有答案了 可能的重复 检测 iPhone iPod touch 的颜色 https stackoverflow com questions 8463212 detecting color of iphone ipod to
  • 布局动画在第一次运行时不起作用

    我有一个带有项目列表的活动 当您单击某个项目时 我希望该项目的播放控件从屏幕底部向上滑动并变得可见 我已经为滑入和滑出定义了一个动画集 并且它们可以工作 我已经在我的活动中设置了动画监听器 并在项目的单击动画中开始幻灯片 我的问题是 第一次
  • 将以文本形式存储的数字转换为数字?

    如何将以文本形式存储的数字转换为数字 我尝试过设置 ActiveSheet Range H154 NumberFormat General 但这不起作用 我发现唯一有效的方法是使用 文本到列 或单击单元格进行编辑 然后单击 Enter 但我
  • StringLengthAttribute 如何工作?

    使用 Entity Framework 和 ASP NET MVC3 验证模型时 我在使用 StringLengthAttribute 时遇到问题 我的模型基于实体框架实体 该实体具有一个分部类 该分部类使用 MetadataType 属性
  • 用于 REST 轮询的 Akka

    我正在尝试将大型 Scala Akka PlayMini 应用程序与外部 REST API 连接起来 这个想法是定期轮询 基本上每 1 到 10 分钟 根 URL 然后爬取子级 URL 以提取数据 然后将其发送到消息队列 我想出了两种方法来
  • 如何访问具有隔离范围的指令属性?

    我需要访问指令创建的模型 同时我需要在指令中获取属性 JS module directive createControl function compile timeout return scope name Name Dynamically
  • Opencart最低下单价

    我正在尝试在 Catalogue view theme default template checkout confirm tpl 中实现以下代码 div div div class warning Minimum 10 Euro to c
  • 使用 PHP 为移动设备进行令牌身份验证

    我正在编写一个 iPhone 应用程序作为我网站的移动版本 我打算公开一些 REST API 以便应用程序可以更新用户的数据 我不希望用户每次都登录 但我想保存他的令牌 cookie 并在以后的所有请求中重用它 我可以设置一个随机令牌并将其
  • 适用于 8 位 MCU 的更快 16 位乘法算法

    我正在寻找一种比下面的算法更好的算法来将两个整数相乘 你对此有什么好主意吗 MCU AT Tiny 84 85 或类似的 运行此代码的地方没有 mul div 运算符 uint16 t umul16 uint16 t a uint16 t
  • 如何在 Flask 中将 login_required 与类一起使用?

    from flask login import login required from flask restful import Resource login required class MyClass Resource 在主文件中 我调
  • 如何在继承的TextBox中保留Font?

    我使用以下代码来获取未绘制边框的 TextBox public partial class CustomTextBox TextBox public CustomTextBox InitializeComponent SetStyle Co
  • BroadcastReceiver 的生命周期相对于 Android O 发生了变化

    如果我声明一个BroadcastReceiver通过系统广播的清单文件 例如ACTION POWER DISCONNECTED 系统将在每次发送特定广播时调用它 因此 BroadcastReceiver 的生命周期不受限制 但也有一些广播无
  • JavaScript 全局变量和自调用匿名函数

    所以我一直在读Javascript 好的部分 https rads stackoverflow com amzn click com 0596517742Crockford 指出的一件事是 Javascript 中全局变量的使用弱点 如果你
  • CSS:当我附加新的 div 元素时,z-index 无法正常工作

    我想实现一个关于绘制由 div 元素配置的一些矩形和贴纸的网站 要添加贴纸或矩形 用户单击按钮 我想按以下顺序排列 div 元素 上 贴纸 gt 架子 gt 矩形 gt 画布 下 所以我在样式表中使用了 z index canvas pos
  • 我怎样才能制作一个无限循环并暂停 5 秒

    string connectionstring server SQLVS2 SQLVS2 database DDM Persist Security Info True uid ddmuser password User02 Ddm Sql
  • JasperReports 可以在报告中包含 pdf 吗?

    是否可以在 JasperReport 中包含现有的 pdf 文件 我们确实希望将新数据附加到现有报告中 而不重新生成现有报告 我们将导出回 pdf 我正在考虑使用 iText 的 PdfCopy 来合并两个 pdf 但希望 JasperRe
  • 通过联合访问 __m128 变量的字节是否合法?

    考虑这个变量声明 union struct float x y z padding components m128 sse data 我的想法是通过分配值x y z字段 执行 SSE2 计算并通过读取结果x y z 不过 我对这是否合法有些
  • 检索 Windows Vista 及更高版本上 BootMgr 的分区号

    我需要将启动管理器映射到分区号 Manufacturer Recovery partition Partition 0 Boot manager Partition 1 C Partition 2 D Partition 3 对于已安装的分