]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h
SecurityPkg: Delete Auth Variable driver
[mirror_edk2.git] / SecurityPkg / VariableAuthenticated / RuntimeDxe / Variable.h
diff --git a/SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h b/SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h
deleted file mode 100644 (file)
index 20f60d4..0000000
+++ /dev/null
@@ -1,836 +0,0 @@
-/** @file\r
-  The internal header file includes the common header files, defines\r
-  internal structure and functions used by Variable modules.\r
-\r
-Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution.  The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#ifndef _VARIABLE_H_\r
-#define _VARIABLE_H_\r
-\r
-#include <PiDxe.h>\r
-#include <Protocol/VariableWrite.h>\r
-#include <Protocol/FaultTolerantWrite.h>\r
-#include <Protocol/FirmwareVolumeBlock.h>\r
-#include <Protocol/Variable.h>\r
-#include <Protocol/VariableLock.h>\r
-#include <Protocol/VarCheck.h>\r
-#include <Library/PcdLib.h>\r
-#include <Library/HobLib.h>\r
-#include <Library/UefiDriverEntryPoint.h>\r
-#include <Library/DxeServicesTableLib.h>\r
-#include <Library/UefiRuntimeLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/SynchronizationLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/BaseCryptLib.h>\r
-#include <Library/PlatformSecureLib.h>\r
-#include <Guid/GlobalVariable.h>\r
-#include <Guid/EventGroup.h>\r
-#include <Guid/AuthenticatedVariableFormat.h>\r
-#include <Guid/ImageAuthentication.h>\r
-#include <Guid/SystemNvDataGuid.h>\r
-#include <Guid/FaultTolerantWrite.h>\r
-#include <Guid/HardwareErrorVariable.h>\r
-#include <Guid/VarErrorFlag.h>\r
-\r
-#define EFI_VARIABLE_ATTRIBUTES_MASK (EFI_VARIABLE_NON_VOLATILE | \\r
-                                      EFI_VARIABLE_BOOTSERVICE_ACCESS | \\r
-                                      EFI_VARIABLE_RUNTIME_ACCESS | \\r
-                                      EFI_VARIABLE_HARDWARE_ERROR_RECORD | \\r
-                                      EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS | \\r
-                                      EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | \\r
-                                      EFI_VARIABLE_APPEND_WRITE)\r
-\r
-#define VARIABLE_ATTRIBUTE_NV_BS        (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)\r
-#define VARIABLE_ATTRIBUTE_BS_RT        (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)\r
-#define VARIABLE_ATTRIBUTE_NV_BS_RT     (VARIABLE_ATTRIBUTE_BS_RT | EFI_VARIABLE_NON_VOLATILE)\r
-#define VARIABLE_ATTRIBUTE_NV_BS_RT_AT  (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)\r
-#define VARIABLE_ATTRIBUTE_NV_BS_RT_HR  (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_HARDWARE_ERROR_RECORD)\r
-#define VARIABLE_ATTRIBUTE_NV_BS_RT_AW  (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)\r
-#define VARIABLE_ATTRIBUTE_NV_BS_RT_AT_HR_AW  (VARIABLE_ATTRIBUTE_NV_BS_RT_AT | EFI_VARIABLE_HARDWARE_ERROR_RECORD | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)\r
-#define VARIABLE_ATTRIBUTE_AT_AW        (EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)\r
-\r
-#define MAX_NV_VARIABLE_SIZE (MAX (MAX (PcdGet32 (PcdMaxVariableSize), \\r
-                                        PcdGet32 (PcdMaxAuthVariableSize)), \\r
-                                   PcdGet32 (PcdMaxHardwareErrorVariableSize)))\r
-\r
-///\r
-/// The size of a 3 character ISO639 language code.\r
-///\r
-#define ISO_639_2_ENTRY_SIZE    3\r
-\r
-typedef enum {\r
-  VariableStoreTypeVolatile,\r
-  VariableStoreTypeHob,\r
-  VariableStoreTypeNv,\r
-  VariableStoreTypeMax\r
-} VARIABLE_STORE_TYPE;\r
-\r
-typedef struct {\r
-  VARIABLE_HEADER *CurrPtr;\r
-  //\r
-  // If both ADDED and IN_DELETED_TRANSITION variable are present,\r
-  // InDeletedTransitionPtr will point to the IN_DELETED_TRANSITION one.\r
-  // Otherwise, CurrPtr will point to the ADDED or IN_DELETED_TRANSITION one,\r
-  // and InDeletedTransitionPtr will be NULL at the same time.\r
-  //\r
-  VARIABLE_HEADER *InDeletedTransitionPtr;\r
-  VARIABLE_HEADER *EndPtr;\r
-  VARIABLE_HEADER *StartPtr;\r
-  BOOLEAN         Volatile;\r
-} VARIABLE_POINTER_TRACK;\r
-\r
-typedef struct {\r
-  EFI_PHYSICAL_ADDRESS  HobVariableBase;\r
-  EFI_PHYSICAL_ADDRESS  VolatileVariableBase;\r
-  EFI_PHYSICAL_ADDRESS  NonVolatileVariableBase;\r
-  EFI_LOCK              VariableServicesLock;\r
-  UINT32                ReentrantState;\r
-} VARIABLE_GLOBAL;\r
-\r
-typedef struct {\r
-  VARIABLE_GLOBAL VariableGlobal;\r
-  UINTN           VolatileLastVariableOffset;\r
-  UINTN           NonVolatileLastVariableOffset;\r
-  UINTN           CommonVariableSpace;\r
-  UINTN           CommonMaxUserVariableSpace;\r
-  UINTN           CommonRuntimeVariableSpace;\r
-  UINTN           CommonVariableTotalSize;\r
-  UINTN           CommonUserVariableTotalSize;\r
-  UINTN           HwErrVariableTotalSize;\r
-  UINTN           MaxVariableSize;\r
-  UINTN           MaxAuthVariableSize;\r
-  UINTN           ScratchBufferSize;\r
-  CHAR8           *PlatformLangCodes;\r
-  CHAR8           *LangCodes;\r
-  CHAR8           *PlatformLang;\r
-  CHAR8           Lang[ISO_639_2_ENTRY_SIZE + 1];\r
-  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbInstance;\r
-} VARIABLE_MODULE_GLOBAL;\r
-\r
-typedef struct {\r
-  LIST_ENTRY  Link;\r
-  EFI_GUID    Guid;\r
-  //CHAR16      *Name;\r
-} VARIABLE_ENTRY;\r
-\r
-/**\r
-  Flush the HOB variable to flash.\r
-\r
-  @param[in] VariableName       Name of variable has been updated or deleted.\r
-  @param[in] VendorGuid         Guid of variable has been updated or deleted.\r
-\r
-**/\r
-VOID\r
-FlushHobVariableToFlash (\r
-  IN CHAR16                     *VariableName,\r
-  IN EFI_GUID                   *VendorGuid\r
-  );\r
-\r
-/**\r
-  Writes a buffer to variable storage space, in the working block.\r
-\r
-  This function writes a buffer to variable storage space into a firmware\r
-  volume block device. The destination is specified by the parameter\r
-  VariableBase. Fault Tolerant Write protocol is used for writing.\r
-\r
-  @param  VariableBase   Base address of the variable to write.\r
-  @param  VariableBuffer Point to the variable data buffer.\r
-\r
-  @retval EFI_SUCCESS    The function completed successfully.\r
-  @retval EFI_NOT_FOUND  Fail to locate Fault Tolerant Write protocol.\r
-  @retval EFI_ABORTED    The function could not complete successfully.\r
-\r
-**/\r
-EFI_STATUS\r
-FtwVariableSpace (\r
-  IN EFI_PHYSICAL_ADDRESS   VariableBase,\r
-  IN VARIABLE_STORE_HEADER  *VariableBuffer\r
-  );\r
-\r
-/**\r
-  Finds variable in storage blocks of volatile and non-volatile storage areas.\r
-\r
-  This code finds variable in storage blocks of volatile and non-volatile storage areas.\r
-  If VariableName is an empty string, then we just return the first\r
-  qualified variable without comparing VariableName and VendorGuid.\r
-  If IgnoreRtCheck is TRUE, then we ignore the EFI_VARIABLE_RUNTIME_ACCESS attribute check\r
-  at runtime when searching existing variable, only VariableName and VendorGuid are compared.\r
-  Otherwise, variables without EFI_VARIABLE_RUNTIME_ACCESS are not visible at runtime.\r
-\r
-  @param[in]   VariableName           Name of the variable to be found.\r
-  @param[in]   VendorGuid             Vendor GUID to be found.\r
-  @param[out]  PtrTrack               VARIABLE_POINTER_TRACK structure for output,\r
-                                      including the range searched and the target position.\r
-  @param[in]   Global                 Pointer to VARIABLE_GLOBAL structure, including\r
-                                      base of volatile variable storage area, base of\r
-                                      NV variable storage area, and a lock.\r
-  @param[in]   IgnoreRtCheck          Ignore EFI_VARIABLE_RUNTIME_ACCESS attribute\r
-                                      check at runtime when searching variable.\r
-\r
-  @retval EFI_INVALID_PARAMETER       If VariableName is not an empty string, while\r
-                                      VendorGuid is NULL.\r
-  @retval EFI_SUCCESS                 Variable successfully found.\r
-  @retval EFI_NOT_FOUND               Variable not found\r
-\r
-**/\r
-EFI_STATUS\r
-FindVariable (\r
-  IN  CHAR16                  *VariableName,\r
-  IN  EFI_GUID                *VendorGuid,\r
-  OUT VARIABLE_POINTER_TRACK  *PtrTrack,\r
-  IN  VARIABLE_GLOBAL         *Global,\r
-  IN  BOOLEAN                 IgnoreRtCheck\r
-  );\r
-\r
-/**\r
-\r
-  Gets the pointer to the end of the variable storage area.\r
-\r
-  This function gets pointer to the end of the variable storage\r
-  area, according to the input variable store header.\r
-\r
-  @param VarStoreHeader  Pointer to the Variable Store Header.\r
-\r
-  @return Pointer to the end of the variable storage area.\r
-\r
-**/\r
-VARIABLE_HEADER *\r
-GetEndPointer (\r
-  IN VARIABLE_STORE_HEADER       *VarStoreHeader\r
-  );\r
-\r
-/**\r
-\r
-  This code gets the pointer to the variable data.\r
-\r
-  @param Variable        Pointer to the Variable Header.\r
-\r
-  @return Pointer to Variable Data.\r
-\r
-**/\r
-UINT8 *\r
-GetVariableDataPtr (\r
-  IN  VARIABLE_HEADER   *Variable\r
-  );\r
-\r
-/**\r
-\r
-  This code gets the size of variable data.\r
-\r
-  @param Variable        Pointer to the Variable Header.\r
-\r
-  @return Size of variable in bytes.\r
-\r
-**/\r
-UINTN\r
-DataSizeOfVariable (\r
-  IN  VARIABLE_HEADER   *Variable\r
-  );\r
-\r
-/**\r
-  This function is to check if the remaining variable space is enough to set\r
-  all Variables from argument list successfully. The purpose of the check\r
-  is to keep the consistency of the Variables to be in variable storage.\r
-\r
-  Note: Variables are assumed to be in same storage.\r
-  The set sequence of Variables will be same with the sequence of VariableEntry from argument list,\r
-  so follow the argument sequence to check the Variables.\r
-\r
-  @param[in] Attributes         Variable attributes for Variable entries.\r
-  @param ...                    The variable argument list with type VARIABLE_ENTRY_CONSISTENCY *.\r
-                                A NULL terminates the list. The VariableSize of \r
-                                VARIABLE_ENTRY_CONSISTENCY is the variable data size as input.\r
-                                It will be changed to variable total size as output.\r
-\r
-  @retval TRUE                  Have enough variable space to set the Variables successfully.\r
-  @retval FALSE                 No enough variable space to set the Variables successfully.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-CheckRemainingSpaceForConsistency (\r
-  IN UINT32                     Attributes,\r
-  ...\r
-  );\r
-  \r
-/**\r
-  Update the variable region with Variable information. If EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is set,\r
-  index of associated public key is needed.\r
-\r
-  @param[in] VariableName       Name of variable.\r
-  @param[in] VendorGuid         Guid of variable.\r
-  @param[in] Data               Variable data.\r
-  @param[in] DataSize           Size of data. 0 means delete.\r
-  @param[in] Attributes         Attributes of the variable.\r
-  @param[in] KeyIndex           Index of associated public key.\r
-  @param[in] MonotonicCount     Value of associated monotonic count.\r
-  @param[in, out] Variable      The variable information that is used to keep track of variable usage.\r
-\r
-  @param[in] TimeStamp          Value of associated TimeStamp.\r
-\r
-  @retval EFI_SUCCESS           The update operation is success.\r
-  @retval EFI_OUT_OF_RESOURCES  Variable region is full, cannot write other data into this region.\r
-\r
-**/\r
-EFI_STATUS\r
-UpdateVariable (\r
-  IN      CHAR16          *VariableName,\r
-  IN      EFI_GUID        *VendorGuid,\r
-  IN      VOID            *Data,\r
-  IN      UINTN           DataSize,\r
-  IN      UINT32          Attributes OPTIONAL,\r
-  IN      UINT32          KeyIndex  OPTIONAL,\r
-  IN      UINT64          MonotonicCount  OPTIONAL,\r
-  IN OUT  VARIABLE_POINTER_TRACK *Variable,\r
-  IN      EFI_TIME        *TimeStamp  OPTIONAL  \r
-  );\r
-\r
-\r
-/**\r
-  Return TRUE if ExitBootServices () has been called.\r
-  \r
-  @retval TRUE If ExitBootServices () has been called.\r
-**/\r
-BOOLEAN\r
-AtRuntime (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Initializes a basic mutual exclusion lock.\r
-\r
-  This function initializes a basic mutual exclusion lock to the released state \r
-  and returns the lock.  Each lock provides mutual exclusion access at its task \r
-  priority level.  Since there is no preemption or multiprocessor support in EFI,\r
-  acquiring the lock only consists of raising to the locks TPL.\r
-  If Lock is NULL, then ASSERT().\r
-  If Priority is not a valid TPL value, then ASSERT().\r
-\r
-  @param  Lock       A pointer to the lock data structure to initialize.\r
-  @param  Priority   EFI TPL is associated with the lock.\r
-\r
-  @return The lock.\r
-\r
-**/\r
-EFI_LOCK *\r
-InitializeLock (\r
-  IN OUT EFI_LOCK  *Lock,\r
-  IN EFI_TPL        Priority\r
-  );\r
-\r
-  \r
-/**\r
-  Acquires lock only at boot time. Simply returns at runtime.\r
-\r
-  This is a temperary function that will be removed when\r
-  EfiAcquireLock() in UefiLib can handle the call in UEFI\r
-  Runtimer driver in RT phase.\r
-  It calls EfiAcquireLock() at boot time, and simply returns\r
-  at runtime.\r
-\r
-  @param  Lock         A pointer to the lock to acquire.\r
-\r
-**/\r
-VOID\r
-AcquireLockOnlyAtBootTime (\r
-  IN EFI_LOCK  *Lock\r
-  );\r
-\r
-\r
-/**\r
-  Releases lock only at boot time. Simply returns at runtime.\r
-\r
-  This is a temperary function which will be removed when\r
-  EfiReleaseLock() in UefiLib can handle the call in UEFI\r
-  Runtimer driver in RT phase.\r
-  It calls EfiReleaseLock() at boot time and simply returns\r
-  at runtime.\r
-\r
-  @param  Lock         A pointer to the lock to release.\r
-\r
-**/\r
-VOID\r
-ReleaseLockOnlyAtBootTime (\r
-  IN EFI_LOCK  *Lock\r
-  );  \r
-\r
-/**\r
-  Retrive the FVB protocol interface by HANDLE.\r
-\r
-  @param[in]  FvBlockHandle     The handle of FVB protocol that provides services for\r
-                                reading, writing, and erasing the target block.\r
-  @param[out] FvBlock           The interface of FVB protocol\r
-\r
-  @retval EFI_SUCCESS           The interface information for the specified protocol was returned.\r
-  @retval EFI_UNSUPPORTED       The device does not support the FVB protocol.\r
-  @retval EFI_INVALID_PARAMETER FvBlockHandle is not a valid EFI_HANDLE or FvBlock is NULL.\r
-  \r
-**/\r
-EFI_STATUS\r
-GetFvbByHandle (\r
-  IN  EFI_HANDLE                          FvBlockHandle,\r
-  OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  **FvBlock\r
-  );\r
-\r
-\r
-/**\r
-  Retrive the Swap Address Range protocol interface.\r
-\r
-  @param[out] SarProtocol       The interface of SAR protocol\r
-\r
-  @retval EFI_SUCCESS           The SAR protocol instance was found and returned in SarProtocol.\r
-  @retval EFI_NOT_FOUND         The SAR protocol instance was not found.\r
-  @retval EFI_INVALID_PARAMETER SarProtocol is NULL.\r
-\r
-**/\r
-EFI_STATUS\r
-GetSarProtocol (\r
-  OUT VOID                                **SarProtocol\r
-  );\r
-\r
-/**\r
-  Function returns an array of handles that support the FVB protocol\r
-  in a buffer allocated from pool. \r
-\r
-  @param[out]  NumberHandles    The number of handles returned in Buffer.\r
-  @param[out]  Buffer           A pointer to the buffer to return the requested\r
-                                array of  handles that support FVB protocol.\r
-\r
-  @retval EFI_SUCCESS           The array of handles was returned in Buffer, and the number of\r
-                                handles in Buffer was returned in NumberHandles.\r
-  @retval EFI_NOT_FOUND         No FVB handle was found.\r
-  @retval EFI_OUT_OF_RESOURCES  There is not enough pool memory to store the matching results.\r
-  @retval EFI_INVALID_PARAMETER NumberHandles is NULL or Buffer is NULL.\r
-  \r
-**/\r
-EFI_STATUS\r
-GetFvbCountAndBuffer (\r
-  OUT UINTN                               *NumberHandles,\r
-  OUT EFI_HANDLE                          **Buffer\r
-  );\r
-\r
-/**\r
-  Initializes variable store area for non-volatile and volatile variable.\r
-\r
-  @retval EFI_SUCCESS           Function successfully executed.\r
-  @retval EFI_OUT_OF_RESOURCES  Fail to allocate enough memory resource.\r
-\r
-**/\r
-EFI_STATUS\r
-VariableCommonInitialize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-\r
-  Variable store garbage collection and reclaim operation.\r
-\r
-  If ReclaimPubKeyStore is FALSE, reclaim variable space by deleting the obsoleted varaibles.\r
-  If ReclaimPubKeyStore is TRUE, reclaim invalid key in public key database and update the PubKeyIndex\r
-  for all the count-based authenticate variable in NV storage.\r
-\r
-  @param[in]      VariableBase            Base address of variable store.\r
-  @param[out]     LastVariableOffset      Offset of last variable.\r
-  @param[in]      IsVolatile              The variable store is volatile or not;\r
-                                          if it is non-volatile, need FTW.\r
-  @param[in, out] UpdatingPtrTrack        Pointer to updating variable pointer track structure.\r
-  @param[in]      NewVariable             Pointer to new variable.\r
-  @param[in]      NewVariableSize         New variable size.\r
-  @param[in]      ReclaimPubKeyStore      Reclaim for public key database or not.\r
-  \r
-  @return EFI_SUCCESS                  Reclaim operation has finished successfully.\r
-  @return EFI_OUT_OF_RESOURCES         No enough memory resources or variable space.\r
-  @return EFI_DEVICE_ERROR             The public key database doesn't exist.\r
-  @return Others                       Unexpect error happened during reclaim operation.\r
-\r
-**/\r
-EFI_STATUS\r
-Reclaim (\r
-  IN     EFI_PHYSICAL_ADDRESS         VariableBase,\r
-  OUT    UINTN                        *LastVariableOffset,\r
-  IN     BOOLEAN                      IsVolatile,\r
-  IN OUT VARIABLE_POINTER_TRACK       *UpdatingPtrTrack,\r
-  IN     VARIABLE_HEADER              *NewVariable,\r
-  IN     UINTN                        NewVariableSize,\r
-  IN     BOOLEAN                      ReclaimPubKeyStore\r
-  );\r
-\r
-/**\r
-  This function reclaims variable storage if free size is below the threshold.\r
-  \r
-**/\r
-VOID\r
-ReclaimForOS(\r
-  VOID\r
-  );  \r
-\r
-\r
-/**\r
-  Initializes variable write service after FVB was ready.\r
-\r
-  @retval EFI_SUCCESS          Function successfully executed.\r
-  @retval Others               Fail to initialize the variable service.\r
-\r
-**/\r
-EFI_STATUS\r
-VariableWriteServiceInitialize (\r
-  VOID\r
-  );\r
-  \r
-/**\r
-  Retrive the SMM Fault Tolerent Write protocol interface.\r
-\r
-  @param[out] FtwProtocol       The interface of SMM Ftw protocol\r
-\r
-  @retval EFI_SUCCESS           The SMM SAR protocol instance was found and returned in SarProtocol.\r
-  @retval EFI_NOT_FOUND         The SMM SAR protocol instance was not found.\r
-  @retval EFI_INVALID_PARAMETER SarProtocol is NULL.\r
-\r
-**/\r
-EFI_STATUS\r
-GetFtwProtocol (\r
-  OUT VOID                                **FtwProtocol\r
-  );\r
-\r
-/**\r
-  Get the proper fvb handle and/or fvb protocol by the given Flash address.\r
-\r
-  @param[in] Address        The Flash address.\r
-  @param[out] FvbHandle     In output, if it is not NULL, it points to the proper FVB handle.\r
-  @param[out] FvbProtocol   In output, if it is not NULL, it points to the proper FVB protocol.\r
-\r
-**/\r
-EFI_STATUS\r
-GetFvbInfoByAddress (\r
-  IN  EFI_PHYSICAL_ADDRESS                Address,\r
-  OUT EFI_HANDLE                          *FvbHandle OPTIONAL,\r
-  OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  **FvbProtocol OPTIONAL\r
-  );\r
-\r
-/**\r
-\r
-  This code finds variable in storage blocks (Volatile or Non-Volatile).\r
-\r
-  Caution: This function may receive untrusted input.\r
-  This function may be invoked in SMM mode, and datasize and data are external input.\r
-  This function will do basic validation, before parse the data.\r
-\r
-  @param VariableName               Name of Variable to be found.\r
-  @param VendorGuid                 Variable vendor GUID.\r
-  @param Attributes                 Attribute value of the variable found.\r
-  @param DataSize                   Size of Data found. If size is less than the\r
-                                    data, this value contains the required size.\r
-  @param Data                       Data pointer.\r
-                      \r
-  @return EFI_INVALID_PARAMETER     Invalid parameter.\r
-  @return EFI_SUCCESS               Find the specified variable.\r
-  @return EFI_NOT_FOUND             Not found.\r
-  @return EFI_BUFFER_TO_SMALL       DataSize is too small for the result.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableServiceGetVariable (\r
-  IN      CHAR16            *VariableName,\r
-  IN      EFI_GUID          *VendorGuid,\r
-  OUT     UINT32            *Attributes OPTIONAL,\r
-  IN OUT  UINTN             *DataSize,\r
-  OUT     VOID              *Data\r
-  );\r
-\r
-/**\r
-\r
-  This code Finds the Next available variable.\r
-\r
-  Caution: This function may receive untrusted input.\r
-  This function may be invoked in SMM mode. This function will do basic validation, before parse the data.\r
-\r
-  @param VariableNameSize           Size of the variable name.\r
-  @param VariableName               Pointer to variable name.\r
-  @param VendorGuid                 Variable Vendor Guid.\r
-\r
-  @return EFI_INVALID_PARAMETER     Invalid parameter.\r
-  @return EFI_SUCCESS               Find the specified variable.\r
-  @return EFI_NOT_FOUND             Not found.\r
-  @return EFI_BUFFER_TO_SMALL       DataSize is too small for the result.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableServiceGetNextVariableName (\r
-  IN OUT  UINTN             *VariableNameSize,\r
-  IN OUT  CHAR16            *VariableName,\r
-  IN OUT  EFI_GUID          *VendorGuid\r
-  );\r
-\r
-/**\r
-\r
-  This code sets variable in storage blocks (Volatile or Non-Volatile).\r
-\r
-  Caution: This function may receive untrusted input.\r
-  This function may be invoked in SMM mode, and datasize and data are external input.\r
-  This function will do basic validation, before parse the data.\r
-  This function will parse the authentication carefully to avoid security issues, like\r
-  buffer overflow, integer overflow.\r
-  This function will check attribute carefully to avoid authentication bypass.\r
-\r
-  @param VariableName                     Name of Variable to be found.\r
-  @param VendorGuid                       Variable vendor GUID.\r
-  @param Attributes                       Attribute value of the variable found\r
-  @param DataSize                         Size of Data found. If size is less than the\r
-                                          data, this value contains the required size.\r
-  @param Data                             Data pointer.\r
-\r
-  @return EFI_INVALID_PARAMETER           Invalid parameter.\r
-  @return EFI_SUCCESS                     Set successfully.\r
-  @return EFI_OUT_OF_RESOURCES            Resource not enough to set variable.\r
-  @return EFI_NOT_FOUND                   Not found.\r
-  @return EFI_WRITE_PROTECTED             Variable is read-only.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableServiceSetVariable (\r
-  IN CHAR16                  *VariableName,\r
-  IN EFI_GUID                *VendorGuid,\r
-  IN UINT32                  Attributes,\r
-  IN UINTN                   DataSize,\r
-  IN VOID                    *Data\r
-  );\r
-\r
-/**\r
-\r
-  This code returns information about the EFI variables.\r
-\r
-  Caution: This function may receive untrusted input.\r
-  This function may be invoked in SMM mode. This function will do basic validation, before parse the data.\r
-\r
-  @param Attributes                     Attributes bitmask to specify the type of variables\r
-                                        on which to return information.\r
-  @param MaximumVariableStorageSize     Pointer to the maximum size of the storage space available\r
-                                        for the EFI variables associated with the attributes specified.\r
-  @param RemainingVariableStorageSize   Pointer to the remaining size of the storage space available\r
-                                        for EFI variables associated with the attributes specified.\r
-  @param MaximumVariableSize            Pointer to the maximum size of an individual EFI variables\r
-                                        associated with the attributes specified.\r
-\r
-  @return EFI_SUCCESS                   Query successfully.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableServiceQueryVariableInfoInternal (\r
-  IN  UINT32                 Attributes,\r
-  OUT UINT64                 *MaximumVariableStorageSize,\r
-  OUT UINT64                 *RemainingVariableStorageSize,\r
-  OUT UINT64                 *MaximumVariableSize\r
-  );\r
-\r
-/**\r
-\r
-  This code returns information about the EFI variables.\r
-\r
-  Caution: This function may receive untrusted input.\r
-  This function may be invoked in SMM mode. This function will do basic validation, before parse the data.\r
-\r
-  @param Attributes                     Attributes bitmask to specify the type of variables\r
-                                        on which to return information.\r
-  @param MaximumVariableStorageSize     Pointer to the maximum size of the storage space available\r
-                                        for the EFI variables associated with the attributes specified.\r
-  @param RemainingVariableStorageSize   Pointer to the remaining size of the storage space available\r
-                                        for EFI variables associated with the attributes specified.\r
-  @param MaximumVariableSize            Pointer to the maximum size of an individual EFI variables\r
-                                        associated with the attributes specified.\r
-\r
-  @return EFI_INVALID_PARAMETER         An invalid combination of attribute bits was supplied.\r
-  @return EFI_SUCCESS                   Query successfully.\r
-  @return EFI_UNSUPPORTED               The attribute is not supported on this platform.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableServiceQueryVariableInfo (\r
-  IN  UINT32                 Attributes,\r
-  OUT UINT64                 *MaximumVariableStorageSize,\r
-  OUT UINT64                 *RemainingVariableStorageSize,\r
-  OUT UINT64                 *MaximumVariableSize\r
-  );  \r
-\r
-/**\r
-  Mark a variable that will become read-only after leaving the DXE phase of execution.\r
-\r
-  @param[in] This          The VARIABLE_LOCK_PROTOCOL instance.\r
-  @param[in] VariableName  A pointer to the variable name that will be made read-only subsequently.\r
-  @param[in] VendorGuid    A pointer to the vendor GUID that will be made read-only subsequently.\r
-\r
-  @retval EFI_SUCCESS           The variable specified by the VariableName and the VendorGuid was marked\r
-                                as pending to be read-only.\r
-  @retval EFI_INVALID_PARAMETER VariableName or VendorGuid is NULL.\r
-                                Or VariableName is an empty string.\r
-  @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has\r
-                                already been signaled.\r
-  @retval EFI_OUT_OF_RESOURCES  There is not enough resource to hold the lock request.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableLockRequestToLock (\r
-  IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This,\r
-  IN       CHAR16                       *VariableName,\r
-  IN       EFI_GUID                     *VendorGuid\r
-  );\r
-\r
-/**\r
-  Check if a Unicode character is a hexadecimal character.\r
-\r
-  This function checks if a Unicode character is a\r
-  hexadecimal character.  The valid hexadecimal character is\r
-  L'0' to L'9', L'a' to L'f', or L'A' to L'F'.\r
-\r
-\r
-  @param Char           The character to check against.\r
-\r
-  @retval TRUE          If the Char is a hexadecmial character.\r
-  @retval FALSE         If the Char is not a hexadecmial character.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-IsHexaDecimalDigitCharacter (\r
-  IN CHAR16             Char\r
-  );\r
-\r
-/**\r
-  Internal SetVariable check.\r
-\r
-  @param[in] VariableName       Name of Variable to set.\r
-  @param[in] VendorGuid         Variable vendor GUID.\r
-  @param[in] Attributes         Attribute value of the variable.\r
-  @param[in] DataSize           Size of Data to set.\r
-  @param[in] Data               Data pointer.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check result was success.\r
-  @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID were supplied,\r
-                                or the DataSize exceeds the minimum or maximum allowed,\r
-                                or the Data value is not following UEFI spec for UEFI defined variables.\r
-  @retval EFI_WRITE_PROTECTED   The variable in question is read-only.\r
-  @retval Others                The return status from check handler.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckSetVariableCheck (\r
-  IN CHAR16     *VariableName,\r
-  IN EFI_GUID   *VendorGuid,\r
-  IN UINT32     Attributes,\r
-  IN UINTN      DataSize,\r
-  IN VOID       *Data\r
-  );\r
-\r
-/**\r
-  Register SetVariable check handler.\r
-\r
-  @param[in] Handler            Pointer to check handler.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check handler was registered successfully.\r
-  @retval EFI_INVALID_PARAMETER Handler is NULL.\r
-  @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has\r
-                                already been signaled.\r
-  @retval EFI_OUT_OF_RESOURCES  There is not enough resource for the SetVariable check handler register request.\r
-  @retval EFI_UNSUPPORTED       This interface is not implemented.\r
-                                For example, it is unsupported in VarCheck protocol if both VarCheck and SmmVarCheck protocols are present.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VarCheckRegisterSetVariableCheckHandler (\r
-  IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER   Handler\r
-  );\r
-\r
-/**\r
-  Internal variable property get.\r
-\r
-  @param[in]  Name              Pointer to the variable name.\r
-  @param[in]  Guid              Pointer to the vendor GUID.\r
-  @param[out] VariableProperty  Pointer to the output variable property.\r
-\r
-  @retval EFI_SUCCESS           The property of variable specified by the Name and Guid was got successfully.\r
-  @retval EFI_NOT_FOUND         The property of variable specified by the Name and Guid was not found.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckVariablePropertyGet (\r
-  IN CHAR16                         *Name,\r
-  IN EFI_GUID                       *Guid,\r
-  OUT VAR_CHECK_VARIABLE_PROPERTY   *VariableProperty\r
-  );\r
-\r
-/**\r
-  Variable property set.\r
-\r
-  @param[in] Name               Pointer to the variable name.\r
-  @param[in] Guid               Pointer to the vendor GUID.\r
-  @param[in] VariableProperty   Pointer to the input variable property.\r
-\r
-  @retval EFI_SUCCESS           The property of variable specified by the Name and Guid was set successfully.\r
-  @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string,\r
-                                or the fields of VariableProperty are not valid.\r
-  @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has\r
-                                already been signaled.\r
-  @retval EFI_OUT_OF_RESOURCES  There is not enough resource for the variable property set request.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VarCheckVariablePropertySet (\r
-  IN CHAR16                         *Name,\r
-  IN EFI_GUID                       *Guid,\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *VariableProperty\r
-  );\r
-\r
-/**\r
-  Variable property get.\r
-\r
-  @param[in]  Name              Pointer to the variable name.\r
-  @param[in]  Guid              Pointer to the vendor GUID.\r
-  @param[out] VariableProperty  Pointer to the output variable property.\r
-\r
-  @retval EFI_SUCCESS           The property of variable specified by the Name and Guid was got successfully.\r
-  @retval EFI_INVALID_PARAMETER Name, Guid or VariableProperty is NULL, or Name is an empty string.\r
-  @retval EFI_NOT_FOUND         The property of variable specified by the Name and Guid was not found.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VarCheckVariablePropertyGet (\r
-  IN CHAR16                         *Name,\r
-  IN EFI_GUID                       *Guid,\r
-  OUT VAR_CHECK_VARIABLE_PROPERTY   *VariableProperty\r
-  );\r
-\r
-/**\r
-  Initialize variable quota.\r
-\r
-**/\r
-VOID\r
-InitializeVariableQuota (\r
-  VOID\r
-  );\r
-\r
-extern VARIABLE_MODULE_GLOBAL  *mVariableModuleGlobal;\r
-\r
-#endif\r