在Windows Vista及更高版本上检索BootMgr的分区号
我需要将引导管理器映射到分区号:在Windows Vista及更高版本上检索BootMgr的分区号,windows,hard-drive,bootloader,Windows,Hard Drive,Bootloader,我需要将引导管理器映射到分区号: Manufacturer Recovery partition = Partition 0 Boot manager = Partition 1 C:\ = Partition 2 D:\ = Partition 3 对于装入的分区,如C:\或D:\,我使用它来检索分区号 现在我想做一些类似的事情来获取Windows启动管理器的编号。我不能假设BootMgr是100 MB分区或系统分区的前一个分区 我看了一下,但没有发现任何有用的东西。我需要将引导管
Manufacturer Recovery partition = Partition 0
Boot manager = Partition 1
C:\ = Partition 2
D:\ = Partition 3
对于装入的分区,如C:\或D:\,我使用它来检索分区号
现在我想做一些类似的事情来获取Windows启动管理器的编号。我不能假设BootMgr是100 MB分区或系统分区的前一个分区
我看了一下,但没有发现任何有用的东西。我需要将引导管理器分区与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语言开发我的应用程序,因此依赖于我相对简单的应用程序
请注意,我说的是使用通过WMI检索的\Device\HarddiskVolume1打开BootMgr分区的句柄,然后使用IOCTL\u STORAGE\u GET\u Device\u 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。这将包含类似\Device\HardDiskVolume1的名称
在Windows 7安装程序格式化的磁盘上,这对应于在包含驱动器C:的分区之前启动的100MB分区。在Windows 7上,包含驱动器C:的大分区是\Device\HardDiskVolume2。通过查看注册表,可以找到Windows启动的系统卷以及bootmgr驻留的系统卷:HKLM\system\Setup\SystemPartition。这将包含类似\Device\HardDiskVolume1的名称
在Windows 7安装程序格式化的磁盘上,这对应于在包含驱动器C:的分区之前启动的100MB分区。在Windows 7上,包含驱动器C:的大分区是\Device\HardDiskVolume2。也许已经太晚了,但是这个信息可以帮助别人
您可以尝试通过发送IOCTL代码(如partition_INFORMATION_EX)来查找BootIndicator分区,以获得真正的解决方案。也许为时已晚,但此信息可以帮助某人
您可以尝试通过发送IOCTL代码(如partition_INFORMATION_EX)来查找BootIndicator分区,以获得真正的解决方案。我在BCDEdit输出中没有看到您想要的内容。输出显示{bootmgr}是partition\Device\HarddiskVolume1。考虑到在这台机器中C:is\Device\HarddiskVolume2和D:is\Device\HarddiskVolume3。。。是一种分区枚举。不这样认为吗?如果C:is\Device\HarddiskVolume1?也许这个问题可以帮助你:你真的认为bootmgr有自己的分区吗???真的吗?????Bootmgr.exe位于系统分区的根目录中!!!我在BCDEdit输出中没有看到您想要的内容。输出显示{bootmgr}是partition\Device\HarddiskVolume1。考虑到在这台机器中C:is\Device\HarddiskVolume2和D:is\Device\HarddiskVolume3。。。是一种分区枚举。不这样认为吗?如果C:is\Device\HarddiskVolume1?也许这个问题可以帮助你:你真的认为bootmgr有自己的分区吗???真的吗?????Bootmgr.exe位于系统分区的根目录中!!!你救了我一天。。。我遇到bcdedit错误,报告它找不到系统分区。我想这就成功了你救了我一天。。。我遇到bcdedit错误,报告它找不到系统分区。我想这就是关键。