UEFI应用与编程--BootOrder
2018-03-15 10:42
639 查看
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]
* 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]
相关文章推荐
- UEFI应用与编程--EFI_DISK_INFO_PROTOCOL
- UEFI应用与编程--AcpiTable
- UEFI应用与编程--ReadSpd
- UEFI应用与编程--显示文件信息
- UEFI应用与编程--HelloWorld(01)
- UEFI应用与编程--HelloWorld(02)
- UEFI应用与编程--解析命令行参数
- UEFI应用与编程--ReadCmos
- UEFI应用与编程--GetNextVariableName
- UEFI应用与编程--HelloWorld(03)
- UEFI应用与编程--WriteCmos
- UEFI应用与编程--EFI_SMBIOS_PROTOCOL
- UEFI应用与编程--EFI_USB2_HC_PROTOCOL
- UEFI应用与编程--EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
- UEFI应用与编程--SmBios
- UEFI应用与编程--ShowBootDevice
- UEFI应用与编程--Handle&EFI_DEVICE_PATH_TO_TEXT_PROTOCOL
- UEFI应用与编程--IndexIo
- UEFI应用与编程--EFI_SMBUS_HC_PROTOCOL
- UEFI应用与编程--8042 Kbc