diff options
| author | Konstantin Aladyshev <aladyshev22@gmail.com> | 2022-02-25 11:08:20 +0300 | 
|---|---|---|
| committer | Konstantin Aladyshev <aladyshev22@gmail.com> | 2022-02-25 15:39:35 +0300 | 
| commit | 68b64507709c0b4e57c9dda6c096bfa4a35b5973 (patch) | |
| tree | 13102afaa6aa47b2117da80d7b9c70681d9870fe /Lessons/Lesson_60/UefiLessonsPkg | |
| parent | a8d3afe27ff6fad28f0f7c756bc4f1bbeb9d13aa (diff) | |
| download | UEFI-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')
| -rw-r--r-- | Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c | 84 | ||||
| -rw-r--r-- | Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf | 24 | 
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  | 
