gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:00:07 25 4
gpt4 key购买 nike

我需要将引导管理器映射到分区号:

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

对于已挂载的分区,如 C:\或 D:\,我使用 IOCTL_STORAGE_GET_DEVICE_NUMBER检索分区号。

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

我看过IOCTLs related to disk geometry但我没有发现任何有用的东西。我需要将引导管理器分区与 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 开发我的应用程序,因此 the BCDEDIT approach implies to include a COM/WMI依赖于我相对简单的应用程序。

请注意,我说的是使用通过 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。这将包含类似 \Device\HardDiskVolume1 的名称。

在由 Windows 7 安装程序格式化的磁盘上,这对应于包含驱动器 C: 的分区之前开始的 100MB 分区。在 Windows 7 上,包含驱动器 C: 的大分区是 \Device\HardDiskVolume2

关于windows - 在 Windows Vista 及更高版本上检索 BootMgr 的分区号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com