天天看點

UEFI應用與程式設計--BootOrder

BootOrder.c

/*
 * BootOrder.c
 *
 *  Created on: 2018年3月14日
 *      Author:
 */




#include <Uefi.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/UefiLib.h>
#include "UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h"

INTN
EFIAPI
ShellAppMain (
  IN UINTN Argc,
  IN CHAR16 **Argv
  )
{
  EFI_STATUS                      Status;
  IN OUT UINTN                    DataSize;
  OUT VOID                        *pData;
  UINT32                          Attributes;
  CHAR16                          *InputStr;
  UINT64                          Data;

  DataSize    = 0;
  pData       = NULL;
  InputStr    = NULL;
  Data        = 0;

  Status = gRT->GetVariable(L"BootOrder", &gEfiGlobalVariableGuid, &Attributes, &DataSize,pData);
  if (Status == EFI_BUFFER_TOO_SMALL) {
    Status = gBS->AllocatePool(EfiBootServicesData, DataSize, &pData);
    Status = gRT->GetVariable(L"BootOrder", &gEfiGlobalVariableGuid, &Attributes, &DataSize,pData);
  }
  DumpHex(0, 2, DataSize, pData);
  ShellPromptForResponse (ShellPromptResponseTypeFreeform, NULL, (VOID**) &InputStr);
  if (EFI_ERROR (ShellConvertStringToUint64 (InputStr, &Data, TRUE, TRUE))) {
    Print(L"input data error.\r\n");
    return EFI_SUCCESS;
  }
  ((UINT64*)pData)[0] = Data;

  Status = gRT->SetVariable(L"BootOrder", &gEfiGlobalVariableGuid, Attributes, DataSize, pData);
  DumpHex(0, 2, DataSize, pData);
  return EFI_SUCCESS;

}
           

BootOrder.inf

[Defines]  
  INF_VERSION             = 0x00010005  
  BASE_NAME               = BootOrder  
  FILE_GUID               = dc72d2c7-a48a-42fd-80b6-9d229d9943c8  
  MODULE_TYPE             = UEFI_APPLICATION  
  VERSION_STRING          = 1.0  
  ENTRY_POINT             = ShellCEntryLib  

[Sources]  
  BootOrder.c  


[Packages]  
  MdePkg/MdePkg.dec  
  MdeModulePkg/MdeModulePkg.dec
  ShellPkg/ShellPkg.dec

[LibraryClasses]  
  UefiLib
  ShellCEntryLib
  UefiShellDebug1CommandsLib
[Protocols]  
 
[Ppis]  
  
[Guids]  
  
[BuildOptions]  
  
  
[Pcd]  
  
  
[PcdEx]  
  
  
[FixedPcd]  
  
 
[FeaturePcd]  
  
[PatchPcd] 
           

繼續閱讀