0
点赞
收藏
分享

微信扫一扫

UEFI BootOption Variable存储字节流


uefi shell 使用dmpstore命令可以看到所存储的所有Variable变量数据。这里随便举2个例子

UEFI BootOption Variable存储字节流_Data


图中的Boot0000就是存储启动项Boot0000的属性变量名称,启动路径的数据。

//
 // Common structure definition for DriverOption and BootOption
 //
 typedef struct {
 //
 // Data read from UEFI NV variables
 //
 UINTN OptionNumber; // #### numerical value, could be LoadOptionNumberUnassigned
 EFI_BOOT_MANAGER_LOAD_OPTION_TYPE OptionType; // LoadOptionTypeBoot or LoadOptionTypeDriver
 UINT32 Attributes; // Load Option Attributes
 CHAR16 *Description; // Load Option Description
 EFI_DEVICE_PATH_PROTOCOL *FilePath; // Load Option Device Path
 UINT8 *OptionalData; // Load Option optional data to pass into image
 UINT32 OptionalDataSize; // Load Option size of OptionalData
 EFI_GUID VendorGuid;//
 // Used at runtime
 //
 EFI_STATUS Status; // Status returned from boot attempt gBS->StartImage ()
 CHAR16 *ExitData; // Exit data returned from gBS->StartImage ()
 UINTN ExitDataSize; // Size of ExitData
 } EFI_BOOT_MANAGER_LOAD_OPTION;

这个是BootOption结构体,但是实际上的存储并不是按照这个格式存储的。

平常我们是通过这个函数来EfiBootManagerVariableToLoadOptionEx------>GetVariable2之后,再把数据整合成EFI_BOOT_MANAGER_LOAD_OPTION结构体

EFI_STATUS
EFIAPI
EfiBootManagerVariableToLoadOptionEx (
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *Option
)
具体实现如下:

//
 // Get the option attribute
 //
 VariablePtr = Variable;
 Attribute = ReadUnaligned32 ((UINT32 *) VariablePtr);
 VariablePtr += sizeof (UINT32);//
 // Get the option’s device path size
 //
 FilePathSize = ReadUnaligned16 ((UINT16 *) VariablePtr);
 VariablePtr += sizeof (UINT16);
 //
 // Get the option’s description string
 //
 Description = (CHAR16 *) VariablePtr;//
 // Get the option’s description string size
 //
 VariablePtr += StrSize ((CHAR16 *) VariablePtr);
 //
 // Get the option’s device path
 //
 FilePath = (EFI_DEVICE_PATH_PROTOCOL *) VariablePtr;
 VariablePtr += FilePathSize;

可以知道Attribute占4个字节,路径长度FilePathSize 2个字节。然后是设备描述,是Unicode字串串,以0x0,0x0结尾,然后跟着的就是FilePath.

可以看到Boot0000,Attribute 0x108, 是unactive的,FilePathSize 0x2c,描述就是,**** Setupo Utility。然后后面跟着路径。

不同的Variable所存储的格式以各自为准

UEFI BootOption Variable存储字节流_启动项_02


举报

相关推荐

0 条评论