Add comment inline. > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael > Kubacki > Sent: Saturday, April 11, 2020 2:38 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J <jian.j.w...@intel.com>; Wu, Hao A <hao.a...@intel.com>; > Gao, Liming <liming....@intel.com> > Subject: [edk2-devel] [PATCH v1 3/9] MdeModulePkg: Define the > VariablePolicyHelperLib > > From: Bret Barkelew <brbar...@microsoft.com> > > https://bugzilla.tianocore.org/show_bug.cgi?id=2522 > > VariablePolicy is an updated interface to replace VarLock and > VarCheckProtocol. > > Add the VariablePolicyHelperLib library, containing several functions to help > with the repetitive process of creating a correctly structured and packed > VariablePolicy entry. > > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Hao A Wu <hao.a...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Signed-off-by: Bret Barkelew <brbar...@microsoft.com> > Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com> > --- > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c > | 396 ++++++++++++++++++++ > MdeModulePkg/Include/Library/VariablePolicyHelperLib.h | > 164 > ++++++++ > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf > | 36 ++ > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.uni > | 12 + > MdeModulePkg/MdeModulePkg.dec | > 5 + > MdeModulePkg/MdeModulePkg.dsc | > 2 + > 6 files changed, 615 insertions(+) > > diff --git > a/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c > b/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c > new file mode 100644 > index 000000000000..7cf58b6cb31c > --- /dev/null > +++ > b/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperL > +++ ib.c > @@ -0,0 +1,396 @@ > +/** @file -- VariablePolicyHelperLib.c > +This library contains helper functions for marshalling and registering > +new policies with the VariablePolicy infrastructure. > + > +This library is currently written against VariablePolicy revision 0x00010000. > + > +Copyright (c) Microsoft Corporation. > +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include <Uefi.h> > + > +#include <Library/BaseLib.h> > +#include <Library/DebugLib.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/MemoryAllocationLib.h> > + > +#include <Protocol/VariablePolicy.h> > + > +/** > + This internal helper function populates the header structure, > + all common fields, and takes care of fix-ups. > + > + NOTE: Only use this internally. Assumes correctly-sized buffers. > + > + @param[out] EntPtr Pointer to the buffer to be populated. > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] LockPolicyType LockPolicyType for the VariablePolicy. > + > +**/ > +STATIC > +VOID > +PopulateCommonData ( > + OUT VARIABLE_POLICY_ENTRY *EntPtr, > + IN CONST EFI_GUID *Namespace, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN UINT8 LockPolicyType > + ) > +{ > + EntPtr->Version = VARIABLE_POLICY_ENTRY_REVISION; > + CopyGuid( &EntPtr->Namespace, Namespace ); > + EntPtr->MinSize = MinSize; > + EntPtr->MaxSize = MaxSize; > + EntPtr->AttributesMustHave = AttributesMustHave; > + EntPtr->AttributesCantHave = AttributesCantHave; > + EntPtr->LockPolicyType = LockPolicyType; > + > + // NOTE: As a heler, fix up MaxSize for compatibility with the old model. > + if (EntPtr->MaxSize == 0) { > + EntPtr->MaxSize = VARIABLE_POLICY_NO_MAX_SIZE; } > + > + return; > +} > + > + > +/** > + This helper function will allocate and populate a new VariablePolicy > + structure for a policy that does not contain any sub-structures (such > +as > + VARIABLE_LOCK_ON_VAR_STATE_POLICY). > + > + NOTE: Caller will need to free structure once finished. > + > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] LockPolicyType LockPolicyType for the VariablePolicy. > + @param[out] NewEntry If successful, will be set to a pointer to the > allocated buffer containing the > + new policy. > + > + @retval EFI_SUCCESS Operation completed successfully and > structure is populated. > + @retval EFI_INVALID_PARAMETER Namespace is NULL. > + @retval EFI_INVALID_PARAMETER LockPolicyType is invalid for a basic > structure. > + @retval EFI_BUFFER_TOO_SMALL Finished structure would not fit in > UINT16 size. > + @retval EFI_OUT_OF_RESOURCES Could not allocate sufficient space > for structure. > + > +**/ > +EFI_STATUS > +EFIAPI > +CreateBasicVariablePolicy ( > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN UINT8 LockPolicyType, > + OUT VARIABLE_POLICY_ENTRY **NewEntry > + ) > +{ > + UINTN TotalSize; > + UINTN NameSize; > + VARIABLE_POLICY_ENTRY *EntPtr; > + CHAR16 *CopyName; > + > + // Check some initial invalid parameters for this function. > + if (Namespace == NULL || NewEntry == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + if (LockPolicyType != VARIABLE_POLICY_TYPE_NO_LOCK && > + LockPolicyType != VARIABLE_POLICY_TYPE_LOCK_NOW && > + LockPolicyType != VARIABLE_POLICY_TYPE_LOCK_ON_CREATE) { > + return EFI_INVALID_PARAMETER; > + } > + > + // Now we've gotta determine the total size of the buffer required > + for // the VariablePolicy structure. > + TotalSize = sizeof( VARIABLE_POLICY_ENTRY ); if (Name != NULL) { > + NameSize = StrnSizeS( Name, MAX_UINT16 ); > + TotalSize += NameSize; > + } > + // Make sure the size fits within a VARIABLE_POLICY_ENTRY.Size. > + ASSERT( TotalSize <= MAX_UINT16 ); > + if (TotalSize > MAX_UINT16) { > + return EFI_BUFFER_TOO_SMALL; > + } > + > + // Allocate a buffer to hold all the data. We're on the home stretch. > + *NewEntry = AllocatePool( TotalSize ); if (*NewEntry == NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + // If we're still here, we're basically done. > + // Copy the data and GET... OUT.... > + EntPtr = *NewEntry; > + PopulateCommonData ( EntPtr, > + Namespace, > + MinSize, > + MaxSize, > + AttributesMustHave, > + AttributesCantHave, > + LockPolicyType ); > + EntPtr->Size = (UINT16)TotalSize; // This is safe > because we've > already checked. > + EntPtr->OffsetToName = sizeof(VARIABLE_POLICY_ENTRY); > + if (Name != NULL) { > + CopyName = (CHAR16*)((UINT8*)EntPtr + EntPtr->OffsetToName); > + CopyMem( CopyName, Name, NameSize ); } > + > + return EFI_SUCCESS; > +} > + > + > +/** > + This helper function will allocate and populate a new VariablePolicy > + structure for a policy with a lock type of > VARIABLE_POLICY_TYPE_LOCK_ON_VAR_STATE. > + > + NOTE: Caller will need to free structure once finished. > + > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] VarStateNamespace Pointer to the EFI_GUID for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Namespace. > + @param[in] VarStateValue Value for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Value. > + @param[in] VarStateName Pointer to the CHAR16 array for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Name. > + @param[out] NewEntry If successful, will be set to a pointer to the > allocated buffer containing the > + new policy. > + > + @retval EFI_SUCCESS Operation completed successfully and > structure is populated. > + @retval EFI_INVALID_PARAMETER Namespace, VarStateNamespace, > VarStateName is NULL. > + @retval EFI_BUFFER_TOO_SMALL Finished structure would not fit in > UINT16 size. > + @retval EFI_OUT_OF_RESOURCES Could not allocate sufficient space > for structure. > + > +**/ > +EFI_STATUS > +EFIAPI > +CreateVarStateVariablePolicy ( > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN CONST EFI_GUID *VarStateNamespace, > + IN UINT8 VarStateValue, > + IN CONST CHAR16 *VarStateName, > + OUT VARIABLE_POLICY_ENTRY **NewEntry > + ) > +{ > + UINTN TotalSize; > + UINTN NameSize; > + UINTN VarStateNameSize; > + VARIABLE_POLICY_ENTRY *EntPtr; > + CHAR16 *CopyName; > + VARIABLE_LOCK_ON_VAR_STATE_POLICY *CopyPolicy; > + > + // Check some initial invalid parameters for this function. > + if (Namespace == NULL || VarStateNamespace == NULL || > + VarStateName == NULL || NewEntry == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + // Now we've gotta determine the total size of the buffer required > + for // the VariablePolicy structure. > + VarStateNameSize = StrnSizeS( VarStateName, MAX_UINT16 ); TotalSize > + = sizeof( VARIABLE_POLICY_ENTRY ) + > + sizeof(VARIABLE_LOCK_ON_VAR_STATE_POLICY) + > + VarStateNameSize; > + if (Name != NULL) { > + NameSize = StrnSizeS( Name, MAX_UINT16 ); > + TotalSize += NameSize; > + } > + // Make sure the size fits within a VARIABLE_POLICY_ENTRY.Size. > + ASSERT( TotalSize <= MAX_UINT16 ); > + if (TotalSize > MAX_UINT16) { > + return EFI_BUFFER_TOO_SMALL; > + } > + > + // Allocate a buffer to hold all the data. We're on the home stretch. > + *NewEntry = AllocatePool( TotalSize ); if (*NewEntry == NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + // If we're still here, we're basically done. > + // Copy the data and GET... OUT.... > + EntPtr = *NewEntry; > + PopulateCommonData ( EntPtr, > + Namespace, > + MinSize, > + MaxSize, > + AttributesMustHave, > + AttributesCantHave, > + VARIABLE_POLICY_TYPE_LOCK_ON_VAR_STATE ); > + EntPtr->Size = (UINT16)TotalSize; // This is safe > because we've > already checked. > + EntPtr->OffsetToName = sizeof(VARIABLE_POLICY_ENTRY) + > + sizeof(VARIABLE_LOCK_ON_VAR_STATE_POLICY) + > + (UINT16)VarStateNameSize; > + > + CopyPolicy = (VARIABLE_LOCK_ON_VAR_STATE_POLICY*)((UINT8*)EntPtr > + > + sizeof(VARIABLE_POLICY_ENTRY)); CopyName = > + (CHAR16*)((UINT8*)CopyPolicy + > + sizeof(VARIABLE_LOCK_ON_VAR_STATE_POLICY)); > + CopyGuid( &CopyPolicy->Namespace, VarStateNamespace ); > + CopyPolicy->Value = VarStateValue; CopyMem( CopyName, > VarStateName, > + VarStateNameSize ); > + > + if (Name != NULL) { > + CopyName = (CHAR16*)((UINT8*)EntPtr + EntPtr->OffsetToName); > + CopyMem( CopyName, Name, NameSize ); } > + > + return EFI_SUCCESS; > +} > + > + > +/** > + This helper function does everything that CreateBasicVariablePolicy() > +does, but also > + uses the passed in protocol to register the policy with the infrastructure. > + Does not return a buffer, does not require the caller to free anything. > + > + @param[in] VariablePolicy Pointer to a valid instance of the > VariablePolicy > protocol. > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] LockPolicyType LockPolicyType for the VariablePolicy. > + > + @retval EFI_INVALID_PARAMETER VariablePolicy pointer is NULL. > + @retval EFI_STATUS Status returned by > CreateBasicVariablePolicy() > or RegisterVariablePolicy(). > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterBasicVariablePolicy ( > + IN VARIABLE_POLICY_PROTOCOL *VariablePolicy, > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN UINT8 LockPolicyType > + ) > +{ > + VARIABLE_POLICY_ENTRY *NewEntry; > + EFI_STATUS Status; > + > + // Check the simple things. > + if (VariablePolicy == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + // Create the new entry and make sure that everything worked. > + NewEntry = NULL; > + Status = CreateBasicVariablePolicy( Namespace, > + Name, > + MinSize, > + MaxSize, > + AttributesMustHave, > + AttributesCantHave, > + LockPolicyType, > + &NewEntry ); > + > + // If that was successful, attempt to register the new policy. > + if (!EFI_ERROR( Status )) { > + Status = VariablePolicy->RegisterVariablePolicy( NewEntry ); } > + > + // If we allocated the buffer, free the buffer. > + if (NewEntry != NULL) { > + FreePool( NewEntry ); > + } > + > + return Status; > +} > + > + > +/** > + This helper function does everything that CreateBasicVariablePolicy() > +does, but also
According to the description, it should do the CreateVarStateVariablePolicy(). This two register routine is same, can we merge it into one routine? Use RegisterVariablePolicy() to present it? > + uses the passed in protocol to register the policy with the infrastructure. > + Does not return a buffer, does not require the caller to free anything. > + > + @param[in] VariablePolicy Pointer to a valid instance of the > VariablePolicy > protocol. > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] VarStateNamespace Pointer to the EFI_GUID for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Namespace. > + @param[in] VarStateName Pointer to the CHAR16 array for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Name. > + @param[in] VarStateValue Value for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Value. > + > + @retval EFI_INVALID_PARAMETER VariablePolicy pointer is NULL. > + @retval EFI_STATUS Status returned by CreateBasicVariablePolicy() or > RegisterVariablePolicy(). > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterVarStateVariablePolicy ( > + IN VARIABLE_POLICY_PROTOCOL *VariablePolicy, > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN CONST EFI_GUID *VarStateNamespace, > + IN CONST CHAR16 *VarStateName, > + IN UINT8 VarStateValue > + ) > +{ > + VARIABLE_POLICY_ENTRY *NewEntry; > + EFI_STATUS Status; > + > + // Check the simple things. > + if (VariablePolicy == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + // Create the new entry and make sure that everything worked. > + NewEntry = NULL; > + Status = CreateVarStateVariablePolicy( Namespace, > + Name, > + MinSize, > + MaxSize, > + AttributesMustHave, > + AttributesCantHave, > + VarStateNamespace, > + VarStateValue, > + VarStateName, > + &NewEntry ); > + > + // If that was successful, attempt to register the new policy. > + if (!EFI_ERROR( Status )) { > + Status = VariablePolicy->RegisterVariablePolicy( NewEntry ); } > + > + // If we allocated the buffer, free the buffer. > + if (NewEntry != NULL) { > + FreePool( NewEntry ); > + } > + > + return Status; > +} > diff --git a/MdeModulePkg/Include/Library/VariablePolicyHelperLib.h > b/MdeModulePkg/Include/Library/VariablePolicyHelperLib.h > new file mode 100644 > index 000000000000..721a55931aab > --- /dev/null > +++ b/MdeModulePkg/Include/Library/VariablePolicyHelperLib.h > @@ -0,0 +1,164 @@ > +/** @file -- VariablePolicyHelperLib.h > +This library contains helper functions for marshalling and registering > +new policies with the VariablePolicy infrastructure. > + > +Copyright (c) Microsoft Corporation. > +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef _VARIABLE_POLICY_HELPER_LIB_H_ > +#define _VARIABLE_POLICY_HELPER_LIB_H_ > + > +#include <Protocol/VariablePolicy.h> > + > +/** > + This helper function will allocate and populate a new VariablePolicy > + structure for a policy that does not contain any sub-structures (such > +as > + VARIABLE_LOCK_ON_VAR_STATE_POLICY). > + > + NOTE: Caller will need to free structure once finished. > + > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] LockPolicyType LockPolicyType for the VariablePolicy. > + @param[out] NewEntry If successful, will be set to a pointer to the > allocated buffer containing the > + new policy. > + > + @retval EFI_SUCCESS Operation completed successfully and > structure is populated. > + @retval EFI_INVALID_PARAMETER Namespace is NULL. > + @retval EFI_INVALID_PARAMETER LockPolicyType is invalid for a basic > structure. > + @retval EFI_BUFFER_TOO_SMALL Finished structure would not fit in > UINT16 size. > + @retval EFI_OUT_OF_RESOURCES Could not allocate sufficient space > for structure. > + > +**/ > +EFI_STATUS > +EFIAPI > +CreateBasicVariablePolicy ( > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN UINT8 LockPolicyType, > + OUT VARIABLE_POLICY_ENTRY **NewEntry > + ); > + > + > +/** > + This helper function will allocate and populate a new VariablePolicy > + structure for a policy with a lock type of > VARIABLE_POLICY_TYPE_LOCK_ON_VAR_STATE. > + > + NOTE: Caller will need to free structure once finished. > + > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] VarStateNamespace Pointer to the EFI_GUID for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Namespace. > + @param[in] VarStateValue Value for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Value. > + @param[in] VarStateName Pointer to the CHAR16 array for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Name. > + @param[out] NewEntry If successful, will be set to a pointer to the > allocated buffer containing the > + new policy. > + > + @retval EFI_SUCCESS Operation completed successfully and > structure is populated. > + @retval EFI_INVALID_PARAMETER Namespace, VarStateNamespace, > VarStateName is NULL. > + @retval EFI_BUFFER_TOO_SMALL Finished structure would not fit in > UINT16 size. > + @retval EFI_OUT_OF_RESOURCES Could not allocate sufficient space > for structure. > + > +**/ > +EFI_STATUS > +EFIAPI > +CreateVarStateVariablePolicy ( > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN CONST EFI_GUID *VarStateNamespace, > + IN UINT8 VarStateValue, > + IN CONST CHAR16 *VarStateName, > + OUT VARIABLE_POLICY_ENTRY **NewEntry > + ); > + > + > +/** > + This helper function does everything that CreateBasicVariablePolicy() > +does, but also > + uses the passed in protocol to register the policy with the infrastructure. > + Does not return a buffer, does not require the caller to free anything. > + > + @param[in] VariablePolicy Pointer to a valid instance of the > VariablePolicy > protocol. > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] LockPolicyType LockPolicyType for the VariablePolicy. > + > + @retval EFI_INVALID_PARAMETER VariablePolicy pointer is NULL. > + @retval EFI_STATUS Status returned by > CreateBasicVariablePolicy() > or RegisterVariablePolicy(). > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterBasicVariablePolicy ( > + IN VARIABLE_POLICY_PROTOCOL *VariablePolicy, > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN UINT8 LockPolicyType > + ); > + > + > +/** > + This helper function does everything that CreateBasicVariablePolicy() > +does, but also > + uses the passed in protocol to register the policy with the infrastructure. > + Does not return a buffer, does not require the caller to free anything. > + > + @param[in] VariablePolicy Pointer to a valid instance of the > VariablePolicy > protocol. > + @param[in] Namespace Pointer to an EFI_GUID for the target variable > namespace that this policy will protect. > + @param[in] Name [Optional] If provided, a pointer to the CHAR16 > array for the target variable name. > + Otherwise, will create a policy that targets an > entire > namespace. > + @param[in] MinSize MinSize for the VariablePolicy. > + @param[in] MaxSize MaxSize for the VariablePolicy. > + @param[in] AttributesMustHave AttributesMustHave for the > VariablePolicy. > + @param[in] AttributesCantHave AttributesCantHave for the > VariablePolicy. > + @param[in] VarStateNamespace Pointer to the EFI_GUID for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Namespace. > + @param[in] VarStateName Pointer to the CHAR16 array for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Name. > + @param[in] VarStateValue Value for the > VARIABLE_LOCK_ON_VAR_STATE_POLICY.Value. > + > + @retval EFI_INVALID_PARAMETER VariablePolicy pointer is NULL. > + @retval EFI_STATUS Status returned by CreateBasicVariablePolicy() or > RegisterVariablePolicy(). > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterVarStateVariablePolicy ( > + IN VARIABLE_POLICY_PROTOCOL *VariablePolicy, > + IN CONST EFI_GUID *Namespace, > + IN CONST CHAR16 *Name OPTIONAL, > + IN UINT32 MinSize, > + IN UINT32 MaxSize, > + IN UINT32 AttributesMustHave, > + IN UINT32 AttributesCantHave, > + IN CONST EFI_GUID *VarStateNamespace, > + IN CONST CHAR16 *VarStateName, > + IN UINT8 VarStateValue > + ); > + > +#endif // _VARIABLE_POLICY_HELPER_LIB_H_ > diff --git > a/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.i > nf > b/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.i > nf > new file mode 100644 > index 000000000000..551435dce8d3 > --- /dev/null > +++ > b/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperL > +++ ib.inf > @@ -0,0 +1,36 @@ > +## @file VariablePolicyHelperLib.inf > +# This library contains helper functions for marshalling and > +registering # new policies with the VariablePolicy infrastructure. > +# > +# This library is currently written against VariablePolicy revision > 0x00010000. > +# > +## > +# Copyright (c) Microsoft Corporation. > +# SPDX-License-Identifier: BSD-2-Clause-Patent ## > + > + > +[Defines] > + INF_VERSION = 0x00010017 > + BASE_NAME = VariablePolicyHelperLib > + # MODULE_UNI_FILE = VariablePolicyHelperLib.uni > + FILE_GUID = B3C2206B-FDD1-4AED-8352-FC5EC34C5630 > + VERSION_STRING = 1.0 > + MODULE_TYPE = BASE > + LIBRARY_CLASS = VariablePolicyHelperLib > + > + > +[Sources] > + VariablePolicyHelperLib.c > + > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > + > +[LibraryClasses] > + BaseLib > + DebugLib > + MemoryAllocationLib > + BaseMemoryLib > diff --git > a/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.u > ni > b/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.u > ni > new file mode 100644 > index 000000000000..39cbf11a4ce9 > --- /dev/null > +++ > b/MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperL > +++ ib.uni > @@ -0,0 +1,12 @@ > +// /** @file > +// VariablePolicyHelperLib.uni > +// > +// Copyright (c) Microsoft Corporation. > +// SPDX-License-Identifier: BSD-2-Clause-Patent // // **/ > + > + > +#string STR_MODULE_ABSTRACT #language en-US "Library containing > helper functions for marshalling and registering new policies with the > VariablePolicy infrastructure" > + > +#string STR_MODULE_DESCRIPTION #language en-US "Library > containing helper functions for marshalling and registering new policies with > the VariablePolicy infrastructure" > diff --git a/MdeModulePkg/MdeModulePkg.dec > b/MdeModulePkg/MdeModulePkg.dec > index 990e23b07a08..8fd0a6a4fdfb 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -147,6 +147,11 @@ > # > DisplayUpdateProgressLib|Include/Library/DisplayUpdateProgressLib.h > > + ## @libraryclass This library contains helper functions for marshalling > and > + # registering new policies with the VariablePolicy infrastructure. > + # > + VariablePolicyHelperLib|Include/Library/VariablePolicyHelperLib.h > + > [Guids] > ## MdeModule package token space guid > # Include/Guid/MdeModulePkgTokenSpace.h > diff --git a/MdeModulePkg/MdeModulePkg.dsc > b/MdeModulePkg/MdeModulePkg.dsc > index 8501dae88eb1..c27a3b488a32 100644 > --- a/MdeModulePkg/MdeModulePkg.dsc > +++ b/MdeModulePkg/MdeModulePkg.dsc > @@ -99,6 +99,7 @@ > > BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupp > ortLib.inf > SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf > > DisplayUpdateProgressLib|MdeModulePkg/Library/DisplayUpdateProgressLi > bGraphics/DisplayUpdateProgressLibGraphics.inf > + > VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/Va > riablePolicyHelperLib.inf > > [LibraryClasses.EBC.PEIM] > IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf > @@ -224,6 +225,7 @@ > MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf > MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf > > MdeModulePkg/Library/BaseMemoryAllocationLibNull/BaseMemoryAllocati > onLibNull.inf > + > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf > > MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf > MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf > -- > 2.16.3.windows.1 > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58132): https://edk2.groups.io/g/devel/message/58132 Mute This Topic: https://groups.io/mt/72928293/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-