\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI 如何解释 EFI 传递给它的“可选数据”有效负载?

\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI 如何解释 EFI 传递给它的“可选数据”有效负载?

我的计算机目前有两个适用于 Windows 的 EFI bootNNNN 条目:

Boot0004  Windows Boot Manager  HD(1,GPT,[redacted],0x800,0x1ff800)/File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)57494e444f5753000100000088000000780000004200430044004f0042004a004500430054003d007b00390064006500610038003600320063002d0035006300640064002d0034006500370030002d0061006300630031002d006600330032006200330034003400640034003700390035007d00000000120100000010000000040000007fff0400
Boot0009  Windows Boot Manager  HD(1,GPT,[redacted],0x800,0x1ff800)/File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)0000424f

如您所见,除了“可选数据”有效负载(每个路径后的十六进制字符串)外,它们是相同的。我正在对启动过程进行故障排除,并希望了解每个有效负载的含义。EFI 规范仅表示这些数据逐字传递给正在启动的程序(在本例中为 BOOTMGFW.EFI),因此我推测如果有任何地方记录了这一点,它将在低级 Windows 文档中。我尝试查看 MSDN,但只找到了有关如何配置引导加载程序的说明,没有关于如何将其映射到它写入 EFI 变量的内容的信息。

较长的有效载荷中嵌入了一个 ASCII 和一个 UTF-16 字符串。以下是部分解码的版本:

WINDOWS\0
01 00 00 00
88 00 00 00
78 00 00 00
BCDOBJECT={9dea862c-5cdd-4e70-acc1-f32b344d4795}
00 00 00 12
01 00 00 00
10 00 00 00
04 00 00 00
7f ff 04 00

最后四个字节7f ff 04 00是 EFI“结束整个设备路径”标记,但 BCDOBJECT= 字符串和该标记之间的字节序列似乎不是 EFI 设备路径。(该序列的前两个字节可能实际上属于 BCDOBJECT= 字符串,是 U+0000 字符串终止符,但 00 00 和 00 12 都不能作为有效 EFI 设备路径的开头。)

BCDOBJECT= 字符串中的 GUID 是不是主 Windows 分区(即存储的分区)的 GUID C:\WINDOWS


较短的“可选数据”有效负载包含两个 ASCII 字符,按顺序为“BO”,前面是我推测的两个字节的 NUL 填充。

答案1

较大的结构是一个BL_WINDOWS_LOAD_OPTIONS结构:[1]

WINDOWS\0      # Signature
01 00 00 00    # Version
88 00 00 00    # Structure size
78 00 00 00    # Offset to BL_FILE_PATH_DESCRIPTOR structure
BCDOBJECT={9dea862c-5cdd-4e70-acc1-f32b344d4795}    # Command line
00 00          # Null terminator
00 12          # Unknown, probably padding
               # BL_FILE_PATH_DESCRIPTOR structure
01 00 00 00    # Version
10 00 00 00    # BL_FILE_PATH_DESCRIPTOR structure size
04 00 00 00    # Path type (4=EFI path)
7f ff 04 00    # EFI path (END_DEVICE_PATH_TYPE/END_ENTIRE_DEVICE_PATH_SUBTYPE)

BCDOBJECT GUID 指的是 BCD 启动项,可以使用以下命令列出:bcdedit /enum /v

[1]https://github.com/reactos/reactos/blob/fd9666630eea1e1d8d482e9458654b193cb6b8b0/boot/environ/include/bl.h#L995

相关内容