]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/VariableAuthenticated/RuntimeDxe/VarCheck.c
SecurityPkg: Delete Auth Variable driver
[mirror_edk2.git] / SecurityPkg / VariableAuthenticated / RuntimeDxe / VarCheck.c
diff --git a/SecurityPkg/VariableAuthenticated/RuntimeDxe/VarCheck.c b/SecurityPkg/VariableAuthenticated/RuntimeDxe/VarCheck.c
deleted file mode 100644 (file)
index 740632f..0000000
+++ /dev/null
@@ -1,1264 +0,0 @@
-/** @file\r
-  Implementation functions and structures for var check protocol.\r
-\r
-Copyright (c) 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
-#include "Variable.h"\r
-#include "AuthService.h"\r
-#include <Library/DevicePathLib.h>\r
-\r
-extern LIST_ENTRY mLockedVariableList;\r
-extern BOOLEAN mEndOfDxe;\r
-extern BOOLEAN mEnableLocking;\r
-\r
-#define VAR_CHECK_HANDLER_TABLE_SIZE    0x8\r
-\r
-UINT32                                  mNumberOfHandler = 0;\r
-UINT32                                  mMaxNumberOfHandler = 0;\r
-VAR_CHECK_SET_VARIABLE_CHECK_HANDLER    *mHandlerTable = NULL;\r
-\r
-typedef struct {\r
-  LIST_ENTRY                    Link;\r
-  EFI_GUID                      Guid;\r
-  VAR_CHECK_VARIABLE_PROPERTY   VariableProperty;\r
-  //CHAR16                        *Name;\r
-} VAR_CHECK_VARIABLE_ENTRY;\r
-\r
-LIST_ENTRY mVarCheckVariableList = INITIALIZE_LIST_HEAD_VARIABLE (mVarCheckVariableList);\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *INTERNAL_VAR_CHECK_FUNCTION) (\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *Propery,\r
-  IN UINTN                          DataSize,\r
-  IN VOID                           *Data\r
-  );\r
-\r
-typedef struct {\r
-  CHAR16                        *Name;\r
-  VAR_CHECK_VARIABLE_PROPERTY   VariableProperty;\r
-  INTERNAL_VAR_CHECK_FUNCTION   CheckFunction;\r
-} UEFI_DEFINED_VARIABLE_ENTRY;\r
-\r
-/**\r
-  Internal check for load option.\r
-\r
-  @param[in] VariablePropery    Pointer to variable property.\r
-  @param[in] DataSize           Data size.\r
-  @param[in] Data               Pointer to data buffer.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check result was success.\r
-  @retval EFI_INVALID_PARAMETER The data buffer is not a valid load option.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckLoadOption (\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *VariablePropery,\r
-  IN UINTN                          DataSize,\r
-  IN VOID                           *Data\r
-  )\r
-{\r
-  UINT16                    FilePathListLength;\r
-  CHAR16                    *Description;\r
-  EFI_DEVICE_PATH_PROTOCOL  *FilePathList;\r
-\r
-  FilePathListLength = *((UINT16 *) ((UINTN) Data + sizeof (UINT32)));\r
-\r
-  //\r
-  // Check Description\r
-  //\r
-  Description = (CHAR16 *) ((UINTN) Data + sizeof (UINT32) + sizeof (UINT16));\r
-  while (Description < (CHAR16 *) ((UINTN) Data + DataSize)) {\r
-    if (*Description == L'\0') {\r
-      break;\r
-    }\r
-    Description++;\r
-  }\r
-  if ((UINTN) Description >= ((UINTN) Data + DataSize)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  Description++;\r
-\r
-  //\r
-  // Check FilePathList\r
-  //\r
-  FilePathList = (EFI_DEVICE_PATH_PROTOCOL *) Description;\r
-  if ((UINTN) FilePathList > (MAX_ADDRESS - FilePathListLength)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  if (((UINTN) FilePathList + FilePathListLength) > ((UINTN) Data + DataSize)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  if (FilePathListLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  if (!IsDevicePathValid (FilePathList, FilePathListLength)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Internal check for key option.\r
-\r
-  @param[in] VariablePropery    Pointer to variable property.\r
-  @param[in] DataSize           Data size.\r
-  @param[in] Data               Pointer to data buffer.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check result was success.\r
-  @retval EFI_INVALID_PARAMETER The data buffer is not a valid key option.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckKeyOption (\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *VariablePropery,\r
-  IN UINTN                          DataSize,\r
-  IN VOID                           *Data\r
-  )\r
-{\r
-  if (((DataSize - sizeof (EFI_KEY_OPTION)) % sizeof (EFI_INPUT_KEY)) != 0) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Internal check for device path.\r
-\r
-  @param[in] VariablePropery    Pointer to variable property.\r
-  @param[in] DataSize           Data size.\r
-  @param[in] Data               Pointer to data buffer.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check result was success.\r
-  @retval EFI_INVALID_PARAMETER The data buffer is not a valid device path.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckDevicePath (\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *VariablePropery,\r
-  IN UINTN                          DataSize,\r
-  IN VOID                           *Data\r
-  )\r
-{\r
-  if (!IsDevicePathValid ((EFI_DEVICE_PATH_PROTOCOL *) Data, DataSize)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Internal check for ASCII string.\r
-\r
-  @param[in] VariablePropery    Pointer to variable property.\r
-  @param[in] DataSize           Data size.\r
-  @param[in] Data               Pointer to data buffer.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check result was success.\r
-  @retval EFI_INVALID_PARAMETER The data buffer is not a Null-terminated ASCII string.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckAsciiString (\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *VariablePropery,\r
-  IN UINTN                          DataSize,\r
-  IN VOID                           *Data\r
-  )\r
-{\r
-  CHAR8     *String;\r
-  UINTN     Index;\r
-\r
-  String = (CHAR8 *) Data;\r
-  if (String[DataSize - 1] == '\0') {\r
-    return EFI_SUCCESS;\r
-  } else {\r
-    for (Index = 1; Index < DataSize && (String[DataSize - 1 - Index] != '\0'); Index++);\r
-    if (Index == DataSize) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-  }\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Internal check for size array.\r
-\r
-  @param[in] VariablePropery    Pointer to variable property.\r
-  @param[in] DataSize           Data size.\r
-  @param[in] Data               Pointer to data buffer.\r
-\r
-  @retval EFI_SUCCESS           The SetVariable check result was success.\r
-  @retval EFI_INVALID_PARAMETER The DataSize is not size array.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InternalVarCheckSizeArray (\r
-  IN VAR_CHECK_VARIABLE_PROPERTY    *VariablePropery,\r
-  IN UINTN                          DataSize,\r
-  IN VOID                           *Data\r
-  )\r
-{\r
-  if ((DataSize % VariablePropery->MinSize) != 0) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-//\r
-// To prevent name collisions with possible future globally defined variables,\r
-// other internal firmware data variables that are not defined here must be\r
-// saved with a unique VendorGuid other than EFI_GLOBAL_VARIABLE or\r
-// any other GUID defined by the UEFI Specification. Implementations must\r
-// only permit the creation of variables with a UEFI Specification-defined\r
-// VendorGuid when these variables are documented in the UEFI Specification.\r
-//\r
-UEFI_DEFINED_VARIABLE_ENTRY mGlobalVariableList[] = {\r
-  {\r
-    EFI_LANG_CODES_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckAsciiString\r
-  },\r
-  {\r
-    EFI_LANG_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckAsciiString\r
-  },\r
-  {\r
-    EFI_TIME_OUT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT16),\r
-      sizeof (UINT16)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_PLATFORM_LANG_CODES_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckAsciiString\r
-  },\r
-  {\r
-    EFI_PLATFORM_LANG_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckAsciiString\r
-  },\r
-  {\r
-    EFI_CON_IN_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (EFI_DEVICE_PATH_PROTOCOL),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckDevicePath\r
-  },\r
-  {\r
-    EFI_CON_OUT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (EFI_DEVICE_PATH_PROTOCOL),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckDevicePath\r
-  },\r
-  {\r
-    EFI_ERR_OUT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (EFI_DEVICE_PATH_PROTOCOL),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckDevicePath\r
-  },\r
-  {\r
-    EFI_CON_IN_DEV_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (EFI_DEVICE_PATH_PROTOCOL),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckDevicePath\r
-  },\r
-  {\r
-    EFI_CON_OUT_DEV_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (EFI_DEVICE_PATH_PROTOCOL),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckDevicePath\r
-  },\r
-  {\r
-    EFI_ERR_OUT_DEV_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (EFI_DEVICE_PATH_PROTOCOL),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckDevicePath\r
-  },\r
-  {\r
-    EFI_BOOT_ORDER_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT16),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckSizeArray\r
-  },\r
-  {\r
-    EFI_BOOT_NEXT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT16),\r
-      sizeof (UINT16)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_BOOT_CURRENT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (UINT16),\r
-      sizeof (UINT16)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_BOOT_OPTION_SUPPORT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (UINT32),\r
-      sizeof (UINT32)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_DRIVER_ORDER_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT16),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckSizeArray\r
-  },\r
-  {\r
-    EFI_SYS_PREP_ORDER_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT16),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckSizeArray\r
-  },\r
-  {\r
-    EFI_HW_ERR_REC_SUPPORT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT16),\r
-      sizeof (UINT16)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_SETUP_MODE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (UINT8),\r
-      sizeof (UINT8)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_KEY_EXCHANGE_KEY_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_PLATFORM_KEY_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_SIGNATURE_SUPPORT_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (EFI_GUID),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckSizeArray\r
-  },\r
-  {\r
-    EFI_SECURE_BOOT_MODE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (UINT8),\r
-      sizeof (UINT8)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_KEK_DEFAULT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_PK_DEFAULT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_DB_DEFAULT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_DBX_DEFAULT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_DBT_DEFAULT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_OS_INDICATIONS_SUPPORT_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (UINT64),\r
-      sizeof (UINT64)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_OS_INDICATIONS_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT64),\r
-      sizeof (UINT64)\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_VENDOR_KEYS_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_BS_RT,\r
-      sizeof (UINT8),\r
-      sizeof (UINT8)\r
-    },\r
-    NULL\r
-  },\r
-};\r
-UEFI_DEFINED_VARIABLE_ENTRY mGlobalVariableList2[] = {\r
-  {\r
-    L"Boot####",\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT32) + sizeof (UINT16),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckLoadOption\r
-  },\r
-  {\r
-    L"Driver####",\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT32) + sizeof (UINT16),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckLoadOption\r
-  },\r
-  {\r
-    L"SysPrep####",\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (UINT32) + sizeof (UINT16),\r
-      MAX_UINTN\r
-    },\r
-    InternalVarCheckLoadOption\r
-  },\r
-  {\r
-    L"Key####",\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (EFI_KEY_OPTION),\r
-      sizeof (EFI_KEY_OPTION) + 3 * sizeof (EFI_INPUT_KEY)\r
-    },\r
-    InternalVarCheckKeyOption\r
-  },\r
-};\r
-\r
-//\r
-// EFI_IMAGE_SECURITY_DATABASE_GUID\r
-//\r
-UEFI_DEFINED_VARIABLE_ENTRY mImageSecurityVariableList[] = {\r
-  {\r
-    EFI_IMAGE_SECURITY_DATABASE,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_IMAGE_SECURITY_DATABASE1,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-  {\r
-    EFI_IMAGE_SECURITY_DATABASE2,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      1,\r
-      MAX_UINTN\r
-    },\r
-    NULL\r
-  },\r
-};\r
-\r
-typedef struct {\r
-  EFI_GUID                      *Guid;\r
-  CHAR16                        *Name;\r
-  VAR_CHECK_VARIABLE_PROPERTY   VariableProperty;\r
-  INTERNAL_VAR_CHECK_FUNCTION   CheckFunction;\r
-} VARIABLE_DRIVER_VARIABLE_ENTRY;\r
-\r
-VARIABLE_DRIVER_VARIABLE_ENTRY mVariableDriverVariableList[] = {\r
-  {\r
-    &gEfiSecureBootEnableDisableGuid,\r
-    EFI_SECURE_BOOT_ENABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS,\r
-      sizeof (UINT8),\r
-      sizeof (UINT8)\r
-    }\r
-  },\r
-  {\r
-    &gEfiCustomModeEnableGuid,\r
-    EFI_CUSTOM_MODE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      0,\r
-      VARIABLE_ATTRIBUTE_NV_BS,\r
-      sizeof (UINT8),\r
-      sizeof (UINT8)\r
-    }\r
-  },\r
-  {\r
-    &gEfiVendorKeysNvGuid,\r
-    EFI_VENDOR_KEYS_NV_VARIABLE_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      sizeof (UINT8),\r
-      sizeof (UINT8)\r
-    }\r
-  },\r
-  {\r
-    &gEfiAuthenticatedVariableGuid,\r
-    AUTHVAR_KEYDB_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AW,\r
-      sizeof (UINT8),\r
-      MAX_UINTN\r
-    }\r
-  },\r
-  {\r
-    &gEfiCertDbGuid,\r
-    EFI_CERT_DB_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT_AT,\r
-      sizeof (UINT32),\r
-      MAX_UINTN\r
-    }\r
-  },\r
-  {\r
-    &gEdkiiVarErrorFlagGuid,\r
-    VAR_ERROR_FLAG_NAME,\r
-    {\r
-      VAR_CHECK_VARIABLE_PROPERTY_REVISION,\r
-      VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,\r
-      VARIABLE_ATTRIBUTE_NV_BS_RT,\r
-      sizeof (VAR_ERROR_FLAG),\r
-      sizeof (VAR_ERROR_FLAG)\r
-    }\r
-  },\r
-};\r
-\r
-/**\r
-  Get UEFI defined global variable or image security database variable property.\r
-  The code will check if variable guid is global variable or image security database guid first.\r
-  If yes, further check if variable name is in mGlobalVariableList, mGlobalVariableList2 or mImageSecurityVariableList.\r
-\r
-  @param[in]  VariableName      Pointer to variable name.\r
-  @param[in]  VendorGuid        Variable Vendor Guid.\r
-  @param[in]  WildcardMatch     Try wildcard match or not.\r
-  @param[out] VariableProperty  Pointer to variable property.\r
-  @param[out] VarCheckFunction  Pointer to check function.\r
-\r
-  @retval EFI_SUCCESS           Variable is not global variable or image security database variable.\r
-  @retval EFI_INVALID_PARAMETER Variable is global variable or image security database variable, but variable name is not in the lists.\r
-\r
-**/\r
-EFI_STATUS\r
-GetUefiDefinedVariableProperty (\r
-  IN CHAR16                         *VariableName,\r
-  IN EFI_GUID                       *VendorGuid,\r
-  IN BOOLEAN                        WildcardMatch,\r
-  OUT VAR_CHECK_VARIABLE_PROPERTY   **VariableProperty,\r
-  OUT INTERNAL_VAR_CHECK_FUNCTION   *VarCheckFunction OPTIONAL\r
-  )\r
-{\r
-  UINTN     Index;\r
-  UINTN     NameLength;\r
-\r
-  if (CompareGuid (VendorGuid, &gEfiGlobalVariableGuid)) {\r
-    //\r
-    // Try list 1, exactly match.\r
-    //\r
-    for (Index = 0; Index < sizeof (mGlobalVariableList)/sizeof (mGlobalVariableList[0]); Index++) {\r
-      if (StrCmp (mGlobalVariableList[Index].Name, VariableName) == 0) {\r
-        if (VarCheckFunction != NULL) {\r
-          *VarCheckFunction = mGlobalVariableList[Index].CheckFunction;\r
-        }\r
-        *VariableProperty = &mGlobalVariableList[Index].VariableProperty;\r
-        return EFI_SUCCESS;\r
-      }\r
-    }\r
-\r
-    //\r
-    // Try list 2.\r
-    //\r
-    NameLength = StrLen (VariableName) - 4;\r
-    for (Index = 0; Index < sizeof (mGlobalVariableList2)/sizeof (mGlobalVariableList2[0]); Index++) {\r
-      if (WildcardMatch) {\r
-        if ((StrLen (VariableName) == StrLen (mGlobalVariableList2[Index].Name)) &&\r
-            (StrnCmp (mGlobalVariableList2[Index].Name, VariableName, NameLength) == 0) &&\r
-            IsHexaDecimalDigitCharacter (VariableName[NameLength]) &&\r
-            IsHexaDecimalDigitCharacter (VariableName[NameLength + 1]) &&\r
-            IsHexaDecimalDigitCharacter (VariableName[NameLength + 2]) &&\r
-            IsHexaDecimalDigitCharacter (VariableName[NameLength + 3])) {\r
-          if (VarCheckFunction != NULL) {\r
-            *VarCheckFunction = mGlobalVariableList2[Index].CheckFunction;\r
-          }\r
-          *VariableProperty = &mGlobalVariableList2[Index].VariableProperty;\r
-          return EFI_SUCCESS;\r
-        }\r
-      }\r
-      if (StrCmp (mGlobalVariableList2[Index].Name, VariableName) == 0) {\r
-        if (VarCheckFunction != NULL) {\r
-          *VarCheckFunction = mGlobalVariableList2[Index].CheckFunction;\r
-        }\r
-        *VariableProperty = &mGlobalVariableList2[Index].VariableProperty;\r
-        return EFI_SUCCESS;\r
-      }\r
-    }\r
-\r
-    //\r
-    // The variable name is not in the lists.\r
-    //\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (CompareGuid (VendorGuid, &gEfiImageSecurityDatabaseGuid)){\r
-    for (Index = 0; Index < sizeof (mImageSecurityVariableList)/sizeof (mImageSecurityVariableList[0]); Index++) {\r
-      if (StrCmp (mImageSecurityVariableList[Index].Name, VariableName) == 0) {\r
-        if (VarCheckFunction != NULL) {\r
-          *VarCheckFunction = mImageSecurityVariableList[Index].CheckFunction;\r
-        }\r
-        *VariableProperty = &mImageSecurityVariableList[Index].VariableProperty;\r
-        return EFI_SUCCESS;\r
-      }\r
-    }\r
-\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  //\r
-  // It is not global variable or image security database variable.\r
-  //\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Get variable property for variables managed by Varaible driver.\r
-\r
-  @param[in]  VariableName      Pointer to variable name.\r
-  @param[in]  VendorGuid        Variable Vendor Guid.\r
-\r
-  @return Pointer to variable property.\r
-\r
-**/\r
-VAR_CHECK_VARIABLE_PROPERTY *\r
-GetVariableDriverVariableProperty (\r
-  IN CHAR16                         *VariableName,\r
-  IN EFI_GUID                       *VendorGuid\r
-  )\r
-{\r
-  UINTN     Index;\r
-\r
-  for (Index = 0; Index < sizeof (mVariableDriverVariableList)/sizeof (mVariableDriverVariableList[0]); Index++) {\r
-    if ((CompareGuid (mVariableDriverVariableList[Index].Guid, VendorGuid)) && (StrCmp (mVariableDriverVariableList[Index].Name, VariableName) == 0)) {\r
-      return &mVariableDriverVariableList[Index].VariableProperty;\r
-    }\r
-  }\r
-\r
-  return NULL;\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 was 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
-  EFI_STATUS                    Status;\r
-  UINTN                         Index;\r
-  LIST_ENTRY                    *Link;\r
-  VAR_CHECK_VARIABLE_ENTRY      *Entry;\r
-  CHAR16                        *Name;\r
-  VAR_CHECK_VARIABLE_PROPERTY   *Property;\r
-  INTERNAL_VAR_CHECK_FUNCTION   VarCheckFunction;\r
-\r
-  if (!mEndOfDxe) {\r
-    //\r
-    // Only do check after End Of Dxe.\r
-    //\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  Property = NULL;\r
-  VarCheckFunction = NULL;\r
-\r
-  for ( Link = GetFirstNode (&mVarCheckVariableList)\r
-      ; !IsNull (&mVarCheckVariableList, Link)\r
-      ; Link = GetNextNode (&mVarCheckVariableList, Link)\r
-      ) {\r
-    Entry = BASE_CR (Link, VAR_CHECK_VARIABLE_ENTRY, Link);\r
-    Name = (CHAR16 *) ((UINTN) Entry + sizeof (*Entry));\r
-    if (CompareGuid (&Entry->Guid, VendorGuid) && (StrCmp (Name, VariableName) == 0)) {\r
-      Property = &Entry->VariableProperty;\r
-      break;\r
-    }\r
-  }\r
-  if (Property == NULL) {\r
-    Property = GetVariableDriverVariableProperty (VariableName, VendorGuid);\r
-  }\r
-  if (Property == NULL) {\r
-    Status = GetUefiDefinedVariableProperty (VariableName, VendorGuid, TRUE, &Property, &VarCheckFunction);\r
-    if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_INFO, "[Variable]: Var Check UEFI defined variable fail %r - %g:%s\n", Status, VendorGuid, VariableName));\r
-      return Status;\r
-    }\r
-  }\r
-  if (Property != NULL) {\r
-    if (mEnableLocking && ((Property->Property & VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY) != 0)) {\r
-      DEBUG ((EFI_D_INFO, "[Variable]: Var Check ReadOnly variable fail %r - %g:%s\n", EFI_WRITE_PROTECTED, VendorGuid, VariableName));\r
-      return EFI_WRITE_PROTECTED;\r
-    }\r
-    if (!((((Attributes & EFI_VARIABLE_APPEND_WRITE) == 0) && (DataSize == 0)) || (Attributes == 0))) {\r
-      //\r
-      // Not to delete variable.\r
-      //\r
-      if ((Attributes & (~EFI_VARIABLE_APPEND_WRITE)) != Property->Attributes) {\r
-        DEBUG ((EFI_D_INFO, "[Variable]: Var Check Attributes(0x%08x to 0x%08x) fail %r - %g:%s\n", Property->Attributes, Attributes, EFI_INVALID_PARAMETER, VendorGuid, VariableName));\r
-        return EFI_INVALID_PARAMETER;\r
-      }\r
-      if (DataSize != 0) {\r
-        if ((DataSize < Property->MinSize) || (DataSize > Property->MaxSize)) {\r
-          DEBUG ((EFI_D_INFO, "[Variable]: Var Check DataSize fail(0x%x not in 0x%x - 0x%x) %r - %g:%s\n", DataSize, Property->MinSize, Property->MaxSize, EFI_INVALID_PARAMETER, VendorGuid, VariableName));\r
-          return EFI_INVALID_PARAMETER;\r
-        }\r
-        if (VarCheckFunction != NULL) {\r
-          Status = VarCheckFunction (\r
-                     Property,\r
-                     DataSize,\r
-                     Data\r
-                     );\r
-          if (EFI_ERROR (Status)) {\r
-            DEBUG ((EFI_D_INFO, "[Variable]: Internal Var Check function fail %r - %g:%s\n", Status, VendorGuid, VariableName));\r
-            return Status;\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  for (Index = 0; Index < mNumberOfHandler; Index ++) {\r
-    Status = mHandlerTable[Index] (\r
-               VariableName,\r
-               VendorGuid,\r
-               Attributes,\r
-               DataSize,\r
-               Data\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_INFO, "[Variable]: Var Check handler fail %r - %g:%s\n", Status, VendorGuid, VariableName));\r
-      return Status;\r
-    }\r
-  }\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Reallocates more global memory to store the registered handler list.\r
-\r
-  @retval RETURN_SUCCESS            Reallocate memory successfully.\r
-  @retval RETURN_OUT_OF_RESOURCES   No enough memory to allocate.\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-ReallocateHandlerTable (\r
-  VOID\r
-  )\r
-{\r
-  VAR_CHECK_SET_VARIABLE_CHECK_HANDLER  *HandlerTable;\r
-\r
-  //\r
-  // Reallocate memory for check handler table.\r
-  //\r
-  HandlerTable = ReallocateRuntimePool (\r
-                     mMaxNumberOfHandler * sizeof (VAR_CHECK_SET_VARIABLE_CHECK_HANDLER), \r
-                     (mMaxNumberOfHandler + VAR_CHECK_HANDLER_TABLE_SIZE) * sizeof (VAR_CHECK_SET_VARIABLE_CHECK_HANDLER), \r
-                     mHandlerTable\r
-                     );\r
-\r
-  //\r
-  // No enough resource to allocate.\r
-  //\r
-  if (HandlerTable == NULL) {\r
-    return RETURN_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  mHandlerTable = HandlerTable;\r
-  //\r
-  // Increase max handler number.\r
-  //\r
-  mMaxNumberOfHandler = mMaxNumberOfHandler + VAR_CHECK_HANDLER_TABLE_SIZE;\r
-  return RETURN_SUCCESS;\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
-  EFI_STATUS    Status;\r
-\r
-  if (Handler == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (mEndOfDxe) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
-  DEBUG ((EFI_D_INFO, "RegisterSetVariableCheckHandler - 0x%x\n", Handler));\r
-\r
-  //\r
-  // Check whether the handler list is enough to store new handler.\r
-  //\r
-  if (mNumberOfHandler == mMaxNumberOfHandler) {\r
-    //\r
-    // Allocate more resources for new handler.\r
-    //\r
-    Status = ReallocateHandlerTable();\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Register new handler into the handler list.\r
-  //\r
-  mHandlerTable[mNumberOfHandler] = Handler;\r
-  mNumberOfHandler ++;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Variable property get function.\r
-\r
-  @param[in] Name           Pointer to the variable name.\r
-  @param[in] Guid           Pointer to the vendor GUID.\r
-  @param[in] WildcardMatch  Try wildcard match or not.\r
-\r
-  @return Pointer to the property of variable specified by the Name and Guid.\r
-\r
-**/\r
-VAR_CHECK_VARIABLE_PROPERTY *\r
-VariablePropertyGetFunction (\r
-  IN CHAR16                 *Name,\r
-  IN EFI_GUID               *Guid,\r
-  IN BOOLEAN                WildcardMatch\r
-  )\r
-{\r
-  LIST_ENTRY                    *Link;\r
-  VAR_CHECK_VARIABLE_ENTRY      *Entry;\r
-  CHAR16                        *VariableName;\r
-  VAR_CHECK_VARIABLE_PROPERTY   *Property;\r
-\r
-  for ( Link = GetFirstNode (&mVarCheckVariableList)\r
-      ; !IsNull (&mVarCheckVariableList, Link)\r
-      ; Link = GetNextNode (&mVarCheckVariableList, Link)\r
-      ) {\r
-    Entry = BASE_CR (Link, VAR_CHECK_VARIABLE_ENTRY, Link);\r
-    VariableName = (CHAR16 *) ((UINTN) Entry + sizeof (*Entry));\r
-    if (CompareGuid (&Entry->Guid, Guid) && (StrCmp (VariableName, Name) == 0)) {\r
-      return &Entry->VariableProperty;\r
-    }\r
-  }\r
-\r
-  Property = GetVariableDriverVariableProperty (Name, Guid);\r
-  if (Property == NULL) {\r
-    GetUefiDefinedVariableProperty (Name, Guid, WildcardMatch, &Property, NULL);\r
-  }\r
-\r
-  return Property;\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
-  EFI_STATUS                    Status;\r
-  VAR_CHECK_VARIABLE_ENTRY      *Entry;\r
-  CHAR16                        *VariableName;\r
-  VAR_CHECK_VARIABLE_PROPERTY   *Property;\r
-\r
-  if (Name == NULL || Name[0] == 0 || Guid == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (VariableProperty == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (VariableProperty->Revision != VAR_CHECK_VARIABLE_PROPERTY_REVISION) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (mEndOfDxe) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
-  Status = EFI_SUCCESS;\r
-\r
-  AcquireLockOnlyAtBootTime (&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
-\r
-  Property = VariablePropertyGetFunction (Name, Guid, FALSE);\r
-  if (Property != NULL) {\r
-    CopyMem (Property, VariableProperty, sizeof (*VariableProperty));\r
-  } else {\r
-    Entry = AllocateRuntimeZeroPool (sizeof (*Entry) + StrSize (Name));\r
-    if (Entry == NULL) {\r
-      Status = EFI_OUT_OF_RESOURCES;\r
-      goto Done;\r
-    }\r
-    VariableName = (CHAR16 *) ((UINTN) Entry + sizeof (*Entry));\r
-    StrnCpy (VariableName, Name, StrLen (Name));\r
-    CopyGuid (&Entry->Guid, Guid);\r
-    CopyMem (&Entry->VariableProperty, VariableProperty, sizeof (*VariableProperty));\r
-    InsertTailList (&mVarCheckVariableList, &Entry->Link);\r
-  }\r
-\r
-Done:\r
-  ReleaseLockOnlyAtBootTime (&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
-\r
-  return Status;\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
-  LIST_ENTRY                    *Link;\r
-  VARIABLE_ENTRY                *Entry;\r
-  CHAR16                        *VariableName;\r
-  BOOLEAN                       Found;\r
-  VAR_CHECK_VARIABLE_PROPERTY   *Property;\r
-\r
-  Found = FALSE;\r
-\r
-  Property = VariablePropertyGetFunction (Name, Guid, TRUE);\r
-  if (Property != NULL) {\r
-    CopyMem (VariableProperty, Property, sizeof (*VariableProperty));\r
-    Found = TRUE;\r
-  }\r
-\r
-  for ( Link = GetFirstNode (&mLockedVariableList)\r
-      ; !IsNull (&mLockedVariableList, Link)\r
-      ; Link = GetNextNode (&mLockedVariableList, Link)\r
-      ) {\r
-    Entry = BASE_CR (Link, VARIABLE_ENTRY, Link);\r
-    VariableName = (CHAR16 *) ((UINTN) Entry + sizeof (*Entry));\r
-    if (CompareGuid (&Entry->Guid, Guid) && (StrCmp (VariableName, Name) == 0)) {\r
-      VariableProperty->Property |= VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY;\r
-      if (!Found) {\r
-        VariableProperty->Revision = VAR_CHECK_VARIABLE_PROPERTY_REVISION;\r
-        Found = TRUE;\r
-      }\r
-    }\r
-  }\r
-\r
-  return (Found ? EFI_SUCCESS : EFI_NOT_FOUND);\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
-  EFI_STATUS    Status;\r
-\r
-  if (Name == NULL || Name[0] == 0 || Guid == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (VariableProperty == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  AcquireLockOnlyAtBootTime (&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
-\r
-  Status = InternalVarCheckVariablePropertyGet (Name, Guid, VariableProperty);\r
-\r
-  ReleaseLockOnlyAtBootTime (&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
-\r
-  return Status;\r
-}\r
-\r