0%

Shell下打印启动项

一、如何实现

链接:https://pan.quark.cn/s/e5cbcb96329a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

EFI_STATUS Status;
UINT16 *BootOrder;
UINTN BootOrderSize;
UINT16 BootDeviceNum;
UINT16 BootOptionName[20];
UINT8 *BootOption;
UINTN Index;
UINTN BootOptionSize;
UINT8 *Ptr;
UINT32 Attribute;
UINT16 DevicePathSize;
CHAR16 *Description;
UINTN DescriptionSize;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
CHAR16 *DevicePathStr;

BootOrder = NULL;
BootOrderSize = 0;

Status = GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrder, &BootOrderSize);
if(BootOrder==NULL){
Print(L"Get Global Variable %r!",Status);
}
if (BootOrderSize != 0) {
BootDeviceNum = (UINT16) (BootOrderSize / sizeof(UINT16));
} else {
BootDeviceNum = 0;
BootOrder = NULL;
}
Print(L"BootDeviceNum %d\n",BootDeviceNum);
for(Index=0;Index<BootDeviceNum;Index++){
UnicodeSPrint (BootOptionName, sizeof (BootOptionName), L"Boot%04x", BootOrder[Index]);
GetEfiGlobalVariable2 (BootOptionName, (VOID **) &BootOption, &BootOptionSize);
if(BootOption==NULL){
continue;
}

Ptr = BootOption;
Attribute = *((UINT32 *)Ptr);
Ptr += sizeof(UINT32);
DevicePathSize = *((UINT16 *)Ptr);
Ptr += sizeof(UINT16);
Description = (CHAR16 *)Ptr;
DescriptionSize = StrSize(Description);
Ptr += DescriptionSize;
DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)Ptr;
Ptr += DevicePathSize;
DevicePathStr = ConvertDevicePathToText(DevicePath, TRUE, TRUE);

Print(L"IsActive=%d\n",(BOOLEAN) ((Attribute & LOAD_OPTION_ACTIVE) == LOAD_OPTION_ACTIVE));
Print(L"IsEfiBootDev=%d\n",(BOOLEAN) ((DevicePath->Type != BBS_DEVICE_PATH) || (DevicePath->SubType != BBS_BBS_DP)));
Print(L"Description = %s\n",Description);
Print(L"DevicePathStr %s\n",DevicePathStr);
Print(L"\n");
}
return EFI_SUCCESS;