aboutsummaryrefslogtreecommitdiffstats
path: root/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample
diff options
context:
space:
mode:
authorKonstantin Aladyshev <aladyshev22@gmail.com>2022-02-25 11:08:20 +0300
committerKonstantin Aladyshev <aladyshev22@gmail.com>2022-02-25 15:39:35 +0300
commit68b64507709c0b4e57c9dda6c096bfa4a35b5973 (patch)
tree13102afaa6aa47b2117da80d7b9c70681d9870fe /Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample
parenta8d3afe27ff6fad28f0f7c756bc4f1bbeb9d13aa (diff)
downloadUEFI-Lessons-68b64507709c0b4e57c9dda6c096bfa4a35b5973.tar.gz
UEFI-Lessons-68b64507709c0b4e57c9dda6c096bfa4a35b5973.tar.bz2
UEFI-Lessons-68b64507709c0b4e57c9dda6c096bfa4a35b5973.zip
Add sources for lesson 60
Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
Diffstat (limited to 'Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample')
-rw-r--r--Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c84
-rw-r--r--Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf24
2 files changed, 108 insertions, 0 deletions
diff --git a/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c
new file mode 100644
index 0000000..9c99e52
--- /dev/null
+++ b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+
+VOID Usage()
+{
+ Print(L"Delete variable\n");
+ Print(L" SetVariableExample <variable name>\n");
+ Print(L"\n");
+ Print(L"Set variable\n");
+ Print(L" SetVariableExample <variable name> <attributes> <value>\n");
+ Print(L"\n");
+ Print(L"<attributes> can be <n|b|r>\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; i<StrLen(AttributesStr); i++) {
+ switch(AttributesStr[i]) {
+ case L'n':
+ Attributes |= EFI_VARIABLE_NON_VOLATILE;
+ break;
+ case L'b':
+ Attributes |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ break;
+ case L'r':
+ Attributes |= EFI_VARIABLE_RUNTIME_ACCESS;
+ break;
+ default:
+ Print(L"Error! Unknown attribute!");
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+ Status = gRT->SetVariable (
+ 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/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
new file mode 100644
index 0000000..948e49a
--- /dev/null
+++ b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
@@ -0,0 +1,24 @@
+##
+# Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+#
+# 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