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;
|