From 6064c1e48b622f53538f4df9bdd402c607a87d51 Mon Sep 17 00:00:00 2001
From: Konstantin Aladyshev <aladyshev22@gmail.com>
Date: Sat, 10 Jul 2021 00:04:40 +0300
Subject: Move lessons to separate folder

Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
---
 .../UefiLessonsPkg/ListVariables/ListVariables.c   | 46 ++++++++++++++++++++++
 .../UefiLessonsPkg/ListVariables/ListVariables.inf | 19 +++++++++
 2 files changed, 65 insertions(+)
 create mode 100644 Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.c
 create mode 100644 Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.inf

(limited to 'Lessons/Lesson_29/UefiLessonsPkg/ListVariables')

diff --git a/Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.c b/Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.c
new file mode 100644
index 0000000..1f3ef4a
--- /dev/null
+++ b/Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.c
@@ -0,0 +1,46 @@
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+
+INTN EFIAPI ShellAppMain(IN UINTN Argc, IN CHAR16 **Argv)
+{
+  EFI_GUID VendorGuid;
+  UINTN VariableNameSize = sizeof (CHAR16);
+  CHAR16* VariableName = AllocateZeroPool(sizeof(CHAR16));
+  if (VariableName == NULL) {
+    Print(L"Error on AllocateZeroPool call\n");
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  while (TRUE)
+  {
+    UINTN VariableNameSizeOld = VariableNameSize;
+    EFI_STATUS Status = gRT->GetNextVariableName(&VariableNameSize, VariableName, &VendorGuid);
+    if (Status == EFI_SUCCESS) {
+      Print(L"%g: %s\n", VendorGuid, VariableName);
+    } else if (Status == EFI_BUFFER_TOO_SMALL) {
+      VariableName = ReallocatePool(VariableNameSizeOld, VariableNameSize, VariableName);
+      if (VariableName == NULL) {
+        Print(L"Error on ReallocatePool call\n");
+        return EFI_OUT_OF_RESOURCES;
+      }
+      Status = gRT->GetNextVariableName(&VariableNameSize, VariableName, &VendorGuid);
+      if (Status == EFI_SUCCESS) {
+        Print(L"%g: %s\n", VendorGuid, VariableName);
+      } else {
+        Print(L"Error on 'gRT->GetNextVariableName' call: %s\n", Status);
+        return Status;
+      }
+    } else if (Status == EFI_NOT_FOUND) {
+      FreePool(VariableName);
+      return EFI_SUCCESS;
+    } else {
+      Print(L"Error on 'gRT->GetNextVariableName' call: %s\n", Status);
+      return Status;
+    }
+  }
+  return EFI_SUCCESS;
+}
diff --git a/Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.inf b/Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.inf
new file mode 100644
index 0000000..14e9fa2
--- /dev/null
+++ b/Lessons/Lesson_29/UefiLessonsPkg/ListVariables/ListVariables.inf
@@ -0,0 +1,19 @@
+[Defines]
+  INF_VERSION                    = 1.25
+  BASE_NAME                      = ListVariables
+  FILE_GUID                      = d66f68b2-3591-45af-bf5d-519152b9d877
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = ShellCEntryLib
+
+[Sources]
+  ListVariables.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  UefiApplicationEntryPoint
+  UefiLib
+  ShellCEntryLib
+
-- 
cgit v1.2.3-18-g5258