From 68b64507709c0b4e57c9dda6c096bfa4a35b5973 Mon Sep 17 00:00:00 2001 From: Konstantin Aladyshev Date: Fri, 25 Feb 2022 11:08:20 +0300 Subject: Add sources for lesson 60 Signed-off-by: Konstantin Aladyshev --- .../SetVariableExample/SetVariableExample.c | 84 ++++++++++++++++++++++ .../SetVariableExample/SetVariableExample.inf | 24 +++++++ 2 files changed, 108 insertions(+) create mode 100644 UefiLessonsPkg/SetVariableExample/SetVariableExample.c create mode 100644 UefiLessonsPkg/SetVariableExample/SetVariableExample.inf (limited to 'UefiLessonsPkg/SetVariableExample') diff --git a/UefiLessonsPkg/SetVariableExample/SetVariableExample.c b/UefiLessonsPkg/SetVariableExample/SetVariableExample.c new file mode 100644 index 0000000..9c99e52 --- /dev/null +++ b/UefiLessonsPkg/SetVariableExample/SetVariableExample.c @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021, Konstantin Aladyshev + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + + +VOID Usage() +{ + Print(L"Delete variable\n"); + Print(L" SetVariableExample \n"); + Print(L"\n"); + Print(L"Set variable\n"); + Print(L" SetVariableExample \n"); + Print(L"\n"); + Print(L" can be \n"); + Print(L"n - NON_VOLATILE\n"); + Print(L"b - BOOTSERVICE_ACCESS\n"); + Print(L"r - RUNTIME_ACCESS\n"); +} + +INTN EFIAPI ShellAppMain(IN UINTN Argc, IN CHAR16 **Argv) +{ + EFI_STATUS Status; + + if (Argc==2) { + CHAR16* VariableName = Argv[1]; + Status = gRT->SetVariable ( + VariableName, + &gEfiCallerIdGuid, + 0, + 0, + NULL + ); + if (EFI_ERROR (Status)) { + Print(L"%r\n", Status); + } else { + Print(L"Variable %s was successfully deleted\n", VariableName); + } + return Status; + } else if (Argc==4) { + CHAR16* VariableName = Argv[1]; + CHAR16* AttributesStr = Argv[2]; + CHAR16* Value = Argv[3]; + UINT32 Attributes = 0; + for (UINTN i=0; iSetVariable ( + VariableName, + &gEfiCallerIdGuid, + Attributes, + StrSize(Value), + Value + ); + if (EFI_ERROR (Status)) { + Print(L"%r\n", Status); + } else { + Print(L"Variable %s was successfully changed\n", VariableName); + } + return Status; + } else { + Usage(); + } + + return EFI_SUCCESS; +} diff --git a/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf b/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf new file mode 100644 index 0000000..948e49a --- /dev/null +++ b/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf @@ -0,0 +1,24 @@ +## +# Copyright (c) 2021, Konstantin Aladyshev +# +# SPDX-License-Identifier: MIT +## + +[Defines] + INF_VERSION = 1.25 + BASE_NAME = SetVariableExample + FILE_GUID = bb2a829f-7943-4691-a03a-f1f48519d7e6 + MODULE_TYPE = UEFI_APPLICATION + VERSION_STRING = 1.0 + ENTRY_POINT = ShellCEntryLib + +[Sources] + SetVariableExample.c + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + UefiApplicationEntryPoint + UefiLib + ShellCEntryLib -- cgit v1.2.3-18-g5258