]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/UserIdentification/UserProfileManagerDxe/UserProfileModify.c
SecurityPkg: Remove code under UserIdentification folder.
[mirror_edk2.git] / SecurityPkg / UserIdentification / UserProfileManagerDxe / UserProfileModify.c
diff --git a/SecurityPkg/UserIdentification/UserProfileManagerDxe/UserProfileModify.c b/SecurityPkg/UserIdentification/UserProfileManagerDxe/UserProfileModify.c
deleted file mode 100644 (file)
index d165e5a..0000000
+++ /dev/null
@@ -1,1475 +0,0 @@
-/** @file\r
-  The functions to modify a user profile.\r
-\r
-Copyright (c) 2009 - 2018, 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 "UserProfileManager.h"\r
-\r
-EFI_USER_PROFILE_HANDLE           mModifyUser = NULL;\r
-\r
-/**\r
-  Display user select form, cab select a user to modify.\r
-\r
-**/\r
-VOID\r
-SelectUserToModify  (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS              Status;\r
-  UINT8                   Index;\r
-  EFI_USER_PROFILE_HANDLE User;\r
-  EFI_USER_PROFILE_HANDLE CurrentUser;\r
-  UINT32                  CurrentAccessRight;\r
-  VOID                    *StartOpCodeHandle;\r
-  VOID                    *EndOpCodeHandle;\r
-  EFI_IFR_GUID_LABEL      *StartLabel;\r
-  EFI_IFR_GUID_LABEL      *EndLabel;\r
-\r
-  //\r
-  // Initialize the container for dynamic opcodes.\r
-  //\r
-  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (StartOpCodeHandle != NULL);\r
-\r
-  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (EndOpCodeHandle != NULL);\r
-\r
-  //\r
-  // Create Hii Extend Label OpCode.\r
-  //\r
-  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                        StartOpCodeHandle,\r
-                                        &gEfiIfrTianoGuid,\r
-                                        NULL,\r
-                                        sizeof (EFI_IFR_GUID_LABEL)\r
-                                        );\r
-  StartLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  StartLabel->Number        = LABEL_USER_MOD_FUNC;\r
-\r
-  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                      EndOpCodeHandle,\r
-                                      &gEfiIfrTianoGuid,\r
-                                      NULL,\r
-                                      sizeof (EFI_IFR_GUID_LABEL)\r
-                                      );\r
-  EndLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  EndLabel->Number        = LABEL_END;\r
-\r
-  //\r
-  // Add each user can be modified.\r
-  //\r
-  User  = NULL;\r
-  Index = 1;\r
-  mUserManager->Current (mUserManager, &CurrentUser);\r
-  while (TRUE) {\r
-    Status = mUserManager->GetNext (mUserManager, &User);\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-\r
-    Status = GetAccessRight (&CurrentAccessRight);\r
-    if (EFI_ERROR (Status)) {\r
-      CurrentAccessRight = EFI_USER_INFO_ACCESS_ENROLL_SELF;\r
-    }\r
-\r
-    if ((CurrentAccessRight == EFI_USER_INFO_ACCESS_MANAGE) || (User == CurrentUser)) {\r
-      AddUserToForm (User, (UINT16)(KEY_MODIFY_USER | KEY_SELECT_USER | Index), StartOpCodeHandle);\r
-    }\r
-    Index++;\r
-  }\r
-\r
-  HiiUpdateForm (\r
-    mCallbackInfo->HiiHandle, // HII handle\r
-    &gUserProfileManagerGuid, // Formset GUID\r
-    FORMID_MODIFY_USER,       // Form ID\r
-    StartOpCodeHandle,        // Label for where to insert opcodes\r
-    EndOpCodeHandle           // Replace data\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
-}\r
-\r
-\r
-/**\r
-  Get all the user info from mModifyUser in the user manager, and save on the\r
-  global variable.\r
-\r
-**/\r
-VOID\r
-GetAllUserInfo (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS            Status;\r
-  EFI_USER_INFO_HANDLE  UserInfo;\r
-  EFI_USER_INFO         *Info;\r
-  UINTN                 InfoSize;\r
-  UINTN                 MemSize;\r
-  UINTN                 DataLen;\r
-\r
-  //\r
-  // Init variable to default value.\r
-  //\r
-  mProviderChoice                   = 0;\r
-  mConncetLogical                   = 0;\r
-\r
-  mUserInfo.CreateDateExist         = FALSE;\r
-  mUserInfo.UsageDateExist          = FALSE;\r
-  mUserInfo.UsageCount              = 0;\r
-\r
-  mUserInfo.AccessPolicyLen         = 0;\r
-  mUserInfo.AccessPolicyModified    = FALSE;\r
-  if (mUserInfo.AccessPolicy != NULL) {\r
-    FreePool (mUserInfo.AccessPolicy);\r
-    mUserInfo.AccessPolicy = NULL;\r
-  }\r
-  mUserInfo.IdentityPolicyLen       = 0;\r
-  mUserInfo.IdentityPolicyModified  = FALSE;\r
-  if (mUserInfo.IdentityPolicy != NULL) {\r
-    FreePool (mUserInfo.IdentityPolicy);\r
-    mUserInfo.IdentityPolicy = NULL;\r
-  }\r
-\r
-  //\r
-  // Allocate user information memory.\r
-  //\r
-  MemSize = sizeof (EFI_USER_INFO) + 63;\r
-  Info    = AllocateZeroPool (MemSize);\r
-  if (Info == NULL) {\r
-    return ;\r
-  }\r
-\r
-  //\r
-  // Get each user information.\r
-  //\r
-  UserInfo = NULL;\r
-  while (TRUE) {\r
-    Status = mUserManager->GetNextInfo (mUserManager, mModifyUser, &UserInfo);\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-    //\r
-    // Get information.\r
-    //\r
-    InfoSize  = MemSize;\r
-    Status    = mUserManager->GetInfo (\r
-                                mUserManager,\r
-                                mModifyUser,\r
-                                UserInfo,\r
-                                Info,\r
-                                &InfoSize\r
-                                );\r
-    if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      MemSize = InfoSize;\r
-      FreePool (Info);\r
-      Info = AllocateZeroPool (MemSize);\r
-      if (Info == NULL) {\r
-        return ;\r
-      }\r
-\r
-      Status = mUserManager->GetInfo (\r
-                               mUserManager,\r
-                               mModifyUser,\r
-                               UserInfo,\r
-                               Info,\r
-                               &InfoSize\r
-                               );\r
-    }\r
-\r
-    if (Status == EFI_SUCCESS) {\r
-      //\r
-      // Deal with each information according to informaiton type.\r
-      //\r
-      DataLen = Info->InfoSize - sizeof (EFI_USER_INFO);\r
-      switch (Info->InfoType) {\r
-      case EFI_USER_INFO_NAME_RECORD:\r
-        CopyMem (&mUserInfo.UserName, (UINT8 *) (Info + 1), DataLen);\r
-        break;\r
-\r
-      case EFI_USER_INFO_CREATE_DATE_RECORD:\r
-        CopyMem (&mUserInfo.CreateDate, (UINT8 *) (Info + 1), DataLen);\r
-        mUserInfo.CreateDateExist = TRUE;\r
-        break;\r
-\r
-      case EFI_USER_INFO_USAGE_DATE_RECORD:\r
-        CopyMem (&mUserInfo.UsageDate, (UINT8 *) (Info + 1), DataLen);\r
-        mUserInfo.UsageDateExist = TRUE;\r
-        break;\r
-\r
-      case EFI_USER_INFO_USAGE_COUNT_RECORD:\r
-        CopyMem (&mUserInfo.UsageCount, (UINT8 *) (Info + 1), DataLen);\r
-        break;\r
-\r
-      case EFI_USER_INFO_ACCESS_POLICY_RECORD:\r
-        mUserInfo.AccessPolicy = AllocateZeroPool (DataLen);\r
-        if (mUserInfo.AccessPolicy == NULL) {\r
-          break;\r
-        }\r
-\r
-        CopyMem (mUserInfo.AccessPolicy, (UINT8 *) (Info + 1), DataLen);\r
-        mUserInfo.AccessPolicyLen = DataLen;\r
-        break;\r
-\r
-      case EFI_USER_INFO_IDENTITY_POLICY_RECORD:\r
-        mUserInfo.IdentityPolicy = AllocateZeroPool (DataLen);\r
-        if (mUserInfo.IdentityPolicy == NULL) {\r
-          break;\r
-        }\r
-\r
-        CopyMem (mUserInfo.IdentityPolicy, (UINT8 *) (Info + 1), DataLen);\r
-        mUserInfo.IdentityPolicyLen = DataLen;\r
-        break;\r
-\r
-      default:\r
-        break;\r
-      }\r
-    }\r
-  }\r
-  FreePool (Info);\r
-}\r
-\r
-\r
-/**\r
-  Convert the Date to a string, and update the Hii database DateID string with it.\r
-\r
-  @param[in] Date       Points to the date to be converted.\r
-  @param[in] DateId     String ID in the HII database to be replaced.\r
-\r
-**/\r
-VOID\r
-ResolveDate (\r
-  IN EFI_TIME                                   *Date,\r
-  IN EFI_STRING_ID                              DateId\r
-  )\r
-{\r
-  CHAR16  *Str;\r
-  UINTN   DateBufLen;\r
-\r
-  //\r
-  // Convert date to string.\r
-  //\r
-  DateBufLen = 64;\r
-  Str        = AllocateZeroPool (DateBufLen);\r
-  if (Str == NULL) {\r
-    return ;\r
-  }\r
-\r
-  UnicodeSPrint (\r
-    Str,\r
-    DateBufLen,\r
-    L"%4d-%2d-%2d ",\r
-    Date->Year,\r
-    Date->Month,\r
-    Date->Day\r
-    );\r
-\r
-  //\r
-  // Convert time to string.\r
-  //\r
-  DateBufLen -= StrLen (Str);\r
-  UnicodeSPrint (\r
-    Str + StrLen (Str),\r
-    DateBufLen,\r
-    L"%2d:%2d:%2d",\r
-    Date->Hour,\r
-    Date->Minute,\r
-    Date->Second\r
-    );\r
-\r
-  HiiSetString (mCallbackInfo->HiiHandle, DateId, Str, NULL);\r
-  FreePool (Str);\r
-}\r
-\r
-\r
-/**\r
-  Convert the CountVal to a string, and update the Hii database CountId string\r
-  with it.\r
-\r
-  @param[in]  CountVal   The hex value to convert.\r
-  @param[in]  CountId    String ID in the HII database to be replaced.\r
-\r
-**/\r
-VOID\r
-ResolveCount (\r
-  IN UINT32                                     CountVal,\r
-  IN EFI_STRING_ID                              CountId\r
-  )\r
-{\r
-  CHAR16  Count[10];\r
-\r
-  UnicodeSPrint (Count, 20, L"%d", CountVal);\r
-  HiiSetString (mCallbackInfo->HiiHandle, CountId, Count, NULL);\r
-}\r
-\r
-\r
-/**\r
-  Concatenates one Null-terminated Unicode string to another Null-terminated\r
-  Unicode string.\r
-\r
-  @param[in, out]  Source1      On entry, point to a Null-terminated Unicode string.\r
-                                On exit, point to a new concatenated Unicode string\r
-  @param[in]       Source2      Pointer to a Null-terminated Unicode string.\r
-\r
-**/\r
-VOID\r
-AddStr (\r
-  IN OUT  CHAR16                  **Source1,\r
-  IN      CONST CHAR16            *Source2\r
-  )\r
-{\r
-  CHAR16                        *TmpStr;\r
-  UINTN                         StrLength;\r
-\r
-  ASSERT (Source1 != NULL);\r
-  ASSERT (Source2 != NULL);\r
-\r
-  if (*Source1 == NULL) {\r
-    StrLength = StrSize (Source2);\r
-  } else {\r
-    StrLength  = StrSize (*Source1);\r
-    StrLength += StrSize (Source2) - 2;\r
-  }\r
-\r
-  TmpStr     = AllocateZeroPool (StrLength);\r
-  ASSERT (TmpStr != NULL);\r
-\r
-  if (*Source1 == NULL) {\r
-    StrCpyS (TmpStr, StrLength / sizeof (CHAR16), Source2);\r
-  } else {\r
-    StrCpyS (TmpStr, StrLength / sizeof (CHAR16), *Source1);\r
-    FreePool (*Source1);\r
-    StrCatS (TmpStr, StrLength / sizeof (CHAR16),Source2);\r
-  }\r
-\r
-  *Source1 = TmpStr;\r
-}\r
-\r
-\r
-/**\r
-  Convert the identity policy to a unicode string and update the Hii database\r
-  IpStringId string with it.\r
-\r
-  @param[in]  Ip         Points to identity policy.\r
-  @param[in]  IpLen      The identity policy length.\r
-  @param[in]  IpStringId String ID in the HII database to be replaced.\r
-\r
-**/\r
-VOID\r
-ResolveIdentityPolicy (\r
-  IN  UINT8                                     *Ip,\r
-  IN  UINTN                                     IpLen,\r
-  IN  EFI_STRING_ID                             IpStringId\r
-  )\r
-{\r
-  CHAR16                        *TmpStr;\r
-  UINTN                         ChkLen;\r
-  EFI_USER_INFO_IDENTITY_POLICY *Identity;\r
-  UINT16                        Index;\r
-  CHAR16                        *ProvStr;\r
-  EFI_STRING_ID                 ProvId;\r
-  EFI_HII_HANDLE                HiiHandle;\r
-  EFI_USER_CREDENTIAL2_PROTOCOL *UserCredential;\r
-\r
-  TmpStr = NULL;\r
-\r
-  //\r
-  // Resolve each policy.\r
-  //\r
-  ChkLen  = 0;\r
-  while (ChkLen < IpLen) {\r
-    Identity = (EFI_USER_INFO_IDENTITY_POLICY *) (Ip + ChkLen);\r
-    switch (Identity->Type) {\r
-    case EFI_USER_INFO_IDENTITY_FALSE:\r
-      AddStr (&TmpStr, L"False");\r
-      break;\r
-\r
-    case EFI_USER_INFO_IDENTITY_TRUE:\r
-      AddStr (&TmpStr, L"None");\r
-      break;\r
-\r
-    case EFI_USER_INFO_IDENTITY_NOT:\r
-      AddStr (&TmpStr, L"! ");\r
-      break;\r
-\r
-    case EFI_USER_INFO_IDENTITY_AND:\r
-      AddStr (&TmpStr, L" && ");\r
-      break;\r
-\r
-    case EFI_USER_INFO_IDENTITY_OR:\r
-      AddStr (&TmpStr, L" || ");\r
-      break;\r
-\r
-    case EFI_USER_INFO_IDENTITY_CREDENTIAL_TYPE:\r
-      for (Index = 0; Index < mProviderInfo->Count; Index++) {\r
-        UserCredential = mProviderInfo->Provider[Index];\r
-        if (CompareGuid ((EFI_GUID *) (Identity + 1), &UserCredential->Type)) {\r
-          UserCredential->Title (\r
-                            UserCredential,\r
-                            &HiiHandle,\r
-                            &ProvId\r
-                            );\r
-          ProvStr = HiiGetString (HiiHandle, ProvId, NULL);\r
-          if (ProvStr != NULL) {\r
-            AddStr (&TmpStr, ProvStr);\r
-            FreePool (ProvStr);\r
-          }\r
-          break;\r
-        }\r
-      }\r
-      break;\r
-\r
-    case EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER:\r
-      for (Index = 0; Index < mProviderInfo->Count; Index++) {\r
-        UserCredential = mProviderInfo->Provider[Index];\r
-        if (CompareGuid ((EFI_GUID *) (Identity + 1), &UserCredential->Identifier)) {\r
-          UserCredential->Title (\r
-                            UserCredential,\r
-                            &HiiHandle,\r
-                            &ProvId\r
-                            );\r
-          ProvStr = HiiGetString (HiiHandle, ProvId, NULL);\r
-          if (ProvStr != NULL) {\r
-            AddStr (&TmpStr, ProvStr);\r
-            FreePool (ProvStr);\r
-          }\r
-          break;\r
-        }\r
-      }\r
-      break;\r
-    }\r
-\r
-    ChkLen += Identity->Length;\r
-  }\r
-\r
-  if (TmpStr != NULL) {\r
-    HiiSetString (mCallbackInfo->HiiHandle, IpStringId, TmpStr, NULL);\r
-    FreePool (TmpStr);\r
-  }\r
-}\r
-\r
-\r
-/**\r
-  Display modify user information form.\r
-\r
-  This form displays, username, create Date, usage date, usage count, identity policy,\r
-  and access policy.\r
-\r
-  @param[in] UserIndex       The index of the user in display list to modify.\r
-\r
-**/\r
-VOID\r
-ModifyUserInfo (\r
-  IN UINT8                                      UserIndex\r
-  )\r
-{\r
-  EFI_STATUS               Status;\r
-  EFI_USER_PROFILE_HANDLE  CurrentUser;\r
-  UINT32                   CurrentAccessRight;\r
-  VOID                     *StartOpCodeHandle;\r
-  VOID                     *EndOpCodeHandle;\r
-  EFI_IFR_GUID_LABEL       *StartLabel;\r
-  EFI_IFR_GUID_LABEL       *EndLabel;\r
-\r
-  //\r
-  // Initialize the container for dynamic opcodes.\r
-  //\r
-  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (StartOpCodeHandle != NULL);\r
-\r
-  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (EndOpCodeHandle != NULL);\r
-\r
-  //\r
-  // Create Hii Extend Label OpCode.\r
-  //\r
-  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                        StartOpCodeHandle,\r
-                                        &gEfiIfrTianoGuid,\r
-                                        NULL,\r
-                                        sizeof (EFI_IFR_GUID_LABEL)\r
-                                        );\r
-  StartLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  StartLabel->Number        = LABEL_USER_INFO_FUNC;\r
-\r
-  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                      EndOpCodeHandle,\r
-                                      &gEfiIfrTianoGuid,\r
-                                      NULL,\r
-                                      sizeof (EFI_IFR_GUID_LABEL)\r
-                                      );\r
-  EndLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  EndLabel->Number        = LABEL_END;\r
-\r
-  //\r
-  // Find the user profile to be modified.\r
-  //\r
-  mModifyUser = NULL;\r
-  Status      = mUserManager->GetNext (mUserManager, &mModifyUser);\r
-  if (EFI_ERROR (Status)) {\r
-    return ;\r
-  }\r
-\r
-  while (UserIndex > 1) {\r
-    Status = mUserManager->GetNext (mUserManager, &mModifyUser);\r
-    if (EFI_ERROR (Status)) {\r
-      return ;\r
-    }\r
-    UserIndex--;\r
-  }\r
-\r
-  //\r
-  // Get user profile information.\r
-  //\r
-  GetAllUserInfo ();\r
-\r
-  //\r
-  // Update user name.\r
-  HiiSetString (\r
-    mCallbackInfo->HiiHandle,\r
-    STRING_TOKEN (STR_USER_NAME_VAL),\r
-    mUserInfo.UserName,\r
-    NULL\r
-    );\r
-\r
-  //\r
-  // Update create date.\r
-  //\r
-  if (mUserInfo.CreateDateExist) {\r
-    ResolveDate (&mUserInfo.CreateDate, STRING_TOKEN (STR_CREATE_DATE_VAL));\r
-  } else {\r
-    HiiSetString (\r
-      mCallbackInfo->HiiHandle,\r
-      STRING_TOKEN (STR_CREATE_DATE_VAL),\r
-      L"",\r
-      NULL\r
-      );\r
-  }\r
-\r
-  //\r
-  // Add usage date.\r
-  //\r
-  if (mUserInfo.UsageDateExist) {\r
-    ResolveDate (&mUserInfo.UsageDate, STRING_TOKEN (STR_USAGE_DATE_VAL));\r
-  } else {\r
-    HiiSetString (\r
-      mCallbackInfo->HiiHandle,\r
-      STRING_TOKEN (STR_USAGE_DATE_VAL),\r
-      L"",\r
-      NULL\r
-      );\r
-  }\r
-\r
-  //\r
-  // Add usage count.\r
-  //\r
-  ResolveCount ((UINT32) mUserInfo.UsageCount, STRING_TOKEN (STR_USAGE_COUNT_VAL));\r
-\r
-  //\r
-  // Add identity policy.\r
-  //\r
-  mUserManager->Current (mUserManager, &CurrentUser);\r
-  if (mModifyUser == CurrentUser) {\r
-    ResolveIdentityPolicy (\r
-      mUserInfo.IdentityPolicy,\r
-      mUserInfo.IdentityPolicyLen,\r
-      STRING_TOKEN (STR_IDENTIFY_POLICY_VAL)\r
-      );\r
-    HiiCreateGotoOpCode (\r
-      StartOpCodeHandle,                                  // Container for opcodes\r
-      FORMID_MODIFY_IP,                                   // Target Form ID\r
-      STRING_TOKEN (STR_IDENTIFY_POLICY),                 // Prompt text\r
-      STRING_TOKEN (STR_IDENTIFY_POLICY_VAL),             // Help text\r
-      EFI_IFR_FLAG_CALLBACK,                              // Question flag\r
-      KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_IP   // Question ID\r
-      );\r
-  }\r
-\r
-  //\r
-  // Add access policy.\r
-  //\r
-  Status = GetAccessRight (&CurrentAccessRight);\r
-  if (EFI_ERROR (Status)) {\r
-    CurrentAccessRight = EFI_USER_INFO_ACCESS_ENROLL_SELF;\r
-  }\r
-\r
-  if (CurrentAccessRight == EFI_USER_INFO_ACCESS_MANAGE) {\r
-    HiiCreateGotoOpCode (\r
-      StartOpCodeHandle,                                  // Container for opcodes\r
-      FORMID_MODIFY_AP,                                   // Target Form ID\r
-      STRING_TOKEN (STR_ACCESS_POLICY),                   // Prompt text\r
-      STRING_TOKEN (STR_NULL_STRING),                     // Help text\r
-      EFI_IFR_FLAG_CALLBACK,                              // Question flag\r
-      KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_AP   // Question ID\r
-      );\r
-  }\r
-\r
-  HiiUpdateForm (\r
-    mCallbackInfo->HiiHandle,                             // HII handle\r
-    &gUserProfileManagerGuid,                             // Formset GUID\r
-    FORMID_USER_INFO,                                     // Form ID\r
-    StartOpCodeHandle,                                    // Label\r
-    EndOpCodeHandle                                       // Replace data\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
-}\r
-\r
-\r
-/**\r
-  Get all the access policy info from current user info, and save in the global\r
-  variable.\r
-\r
-**/\r
-VOID\r
-ResolveAccessPolicy (\r
-  VOID\r
-  )\r
-{\r
-  UINTN                         OffSet;\r
-  EFI_USER_INFO_ACCESS_CONTROL  Control;\r
-  UINTN                         ValLen;\r
-  UINT8                         *AccessData;\r
-\r
-  //\r
-  // Set default value\r
-  //\r
-  mAccessInfo.AccessRight       = EFI_USER_INFO_ACCESS_ENROLL_SELF;\r
-  mAccessInfo.AccessSetup       = ACCESS_SETUP_RESTRICTED;\r
-  mAccessInfo.AccessBootOrder   = EFI_USER_INFO_ACCESS_BOOT_ORDER_INSERT;\r
-\r
-  mAccessInfo.LoadPermitLen     = 0;\r
-  mAccessInfo.LoadForbidLen     = 0;\r
-  mAccessInfo.ConnectPermitLen  = 0;\r
-  mAccessInfo.ConnectForbidLen  = 0;\r
-\r
-  //\r
-  // Get each user access policy.\r
-  //\r
-  OffSet = 0;\r
-  while (OffSet < mUserInfo.AccessPolicyLen) {\r
-    CopyMem (&Control, mUserInfo.AccessPolicy + OffSet, sizeof (Control));\r
-    ValLen = Control.Size - sizeof (Control);\r
-    switch (Control.Type) {\r
-    case EFI_USER_INFO_ACCESS_ENROLL_SELF:\r
-      mAccessInfo.AccessRight = EFI_USER_INFO_ACCESS_ENROLL_SELF;\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_ENROLL_OTHERS:\r
-      mAccessInfo.AccessRight = EFI_USER_INFO_ACCESS_ENROLL_OTHERS;\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_MANAGE:\r
-      mAccessInfo.AccessRight = EFI_USER_INFO_ACCESS_MANAGE;\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_SETUP:\r
-      AccessData = mUserInfo.AccessPolicy + OffSet + sizeof (Control);\r
-      if (CompareGuid ((EFI_GUID *) AccessData, &gEfiUserInfoAccessSetupNormalGuid)) {\r
-        mAccessInfo.AccessSetup = ACCESS_SETUP_NORMAL;\r
-      } else if (CompareGuid ((EFI_GUID *) AccessData, &gEfiUserInfoAccessSetupRestrictedGuid)) {\r
-        mAccessInfo.AccessSetup = ACCESS_SETUP_RESTRICTED;\r
-      } else if (CompareGuid ((EFI_GUID *) AccessData, &gEfiUserInfoAccessSetupAdminGuid)) {\r
-        mAccessInfo.AccessSetup = ACCESS_SETUP_ADMIN;\r
-      }\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_BOOT_ORDER:\r
-      AccessData = mUserInfo.AccessPolicy + OffSet + sizeof (Control);\r
-      CopyMem (&mAccessInfo.AccessBootOrder, AccessData, sizeof (UINT32));\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_FORBID_LOAD:\r
-      if (mAccessInfo.LoadForbid != NULL) {\r
-        FreePool (mAccessInfo.LoadForbid);\r
-      }\r
-\r
-      mAccessInfo.LoadForbid = AllocateZeroPool (ValLen);\r
-      if (mAccessInfo.LoadForbid != NULL) {\r
-        AccessData = mUserInfo.AccessPolicy + OffSet + sizeof (Control);\r
-        CopyMem (mAccessInfo.LoadForbid, AccessData, ValLen);\r
-        mAccessInfo.LoadForbidLen = ValLen;\r
-      }\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_PERMIT_LOAD:\r
-      if (mAccessInfo.LoadPermit != NULL) {\r
-        FreePool (mAccessInfo.LoadPermit);\r
-      }\r
-\r
-      mAccessInfo.LoadPermit = AllocateZeroPool (ValLen);\r
-      if (mAccessInfo.LoadPermit != NULL) {\r
-        AccessData = mUserInfo.AccessPolicy + OffSet + sizeof (Control);\r
-        CopyMem (mAccessInfo.LoadPermit, AccessData, ValLen);\r
-        mAccessInfo.LoadPermitLen = ValLen;\r
-      }\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_FORBID_CONNECT:\r
-      if (mAccessInfo.ConnectForbid != NULL) {\r
-        FreePool (mAccessInfo.ConnectForbid);\r
-      }\r
-\r
-      mAccessInfo.ConnectForbid = AllocateZeroPool (ValLen);\r
-      if (mAccessInfo.ConnectForbid != NULL) {\r
-        AccessData = mUserInfo.AccessPolicy + OffSet + sizeof (Control);\r
-        CopyMem (mAccessInfo.ConnectForbid, AccessData, ValLen);\r
-        mAccessInfo.ConnectForbidLen = ValLen;\r
-      }\r
-      break;\r
-\r
-    case EFI_USER_INFO_ACCESS_PERMIT_CONNECT:\r
-      if (mAccessInfo.ConnectPermit != NULL) {\r
-        FreePool (mAccessInfo.ConnectPermit);\r
-      }\r
-\r
-      mAccessInfo.ConnectPermit = AllocateZeroPool (ValLen);\r
-      if (mAccessInfo.ConnectPermit != NULL) {\r
-        AccessData = mUserInfo.AccessPolicy + OffSet + sizeof (Control);\r
-        CopyMem (mAccessInfo.ConnectPermit, AccessData, ValLen);\r
-        mAccessInfo.ConnectPermitLen = ValLen;\r
-      }\r
-      break;\r
-    }\r
-\r
-    OffSet += Control.Size;\r
-  }\r
-}\r
-\r
-\r
-/**\r
-  Find the specified info in User profile by the InfoType.\r
-\r
-  @param[in]  User         Handle of the user whose information will be searched.\r
-  @param[in]  InfoType     The user information type to find.\r
-  @param[out] UserInfo     Points to user information handle found.\r
-\r
-  @retval EFI_SUCCESS      Find the user information successfully.\r
-  @retval Others           Fail to find the user information.\r
-\r
-**/\r
-EFI_STATUS\r
-FindInfoByType (\r
-  IN  EFI_USER_PROFILE_HANDLE                   User,\r
-  IN  UINT8                                     InfoType,\r
-  OUT EFI_USER_INFO_HANDLE                      *UserInfo\r
-  )\r
-{\r
-  EFI_STATUS    Status;\r
-  EFI_USER_INFO *Info;\r
-  UINTN         InfoSize;\r
-  UINTN         MemSize;\r
-\r
-  if (UserInfo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  *UserInfo = NULL;\r
-  //\r
-  // Allocate user information memory.\r
-  //\r
-  MemSize = sizeof (EFI_USER_INFO) + 63;\r
-  Info    = AllocateZeroPool (MemSize);\r
-  if (Info == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  //\r
-  // Get each user information.\r
-  //\r
-  while (TRUE) {\r
-    Status = mUserManager->GetNextInfo (mUserManager, User, UserInfo);\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-    //\r
-    // Get information.\r
-    //\r
-    InfoSize  = MemSize;\r
-    Status    = mUserManager->GetInfo (\r
-                                mUserManager,\r
-                                User,\r
-                                *UserInfo,\r
-                                Info,\r
-                                &InfoSize\r
-                                );\r
-    if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      MemSize = InfoSize;\r
-      FreePool (Info);\r
-      Info = AllocateZeroPool (MemSize);\r
-      if (Info == NULL) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-      Status = mUserManager->GetInfo (\r
-                               mUserManager,\r
-                               User,\r
-                               *UserInfo,\r
-                               Info,\r
-                               &InfoSize\r
-                               );\r
-    }\r
-    if (Status == EFI_SUCCESS) {\r
-      if (Info->InfoType == InfoType) {\r
-        break;\r
-      }\r
-    }\r
-  }\r
-\r
-  FreePool (Info);\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Display modify user access policy form.\r
-\r
-  In this form, access right, access setup and access boot order are dynamically\r
-  added. Load devicepath and connect devicepath are displayed too.\r
-\r
-**/\r
-VOID\r
-ModidyAccessPolicy (\r
-  VOID\r
-  )\r
-{\r
-  VOID                *StartOpCodeHandle;\r
-  VOID                *EndOpCodeHandle;\r
-  VOID                *OptionsOpCodeHandle;\r
-  EFI_IFR_GUID_LABEL  *StartLabel;\r
-  EFI_IFR_GUID_LABEL  *EndLabel;\r
-  VOID                *DefaultOpCodeHandle;\r
-\r
-  //\r
-  // Initialize the container for dynamic opcodes.\r
-  //\r
-  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (StartOpCodeHandle != NULL);\r
-\r
-  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (EndOpCodeHandle != NULL);\r
-\r
-  //\r
-  // Create Hii Extend Label OpCode.\r
-  //\r
-  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                        StartOpCodeHandle,\r
-                                        &gEfiIfrTianoGuid,\r
-                                        NULL,\r
-                                        sizeof (EFI_IFR_GUID_LABEL)\r
-                                        );\r
-  StartLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  StartLabel->Number        = LABEL_AP_MOD_FUNC;\r
-\r
-  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                      EndOpCodeHandle,\r
-                                      &gEfiIfrTianoGuid,\r
-                                      NULL,\r
-                                      sizeof (EFI_IFR_GUID_LABEL)\r
-                                      );\r
-  EndLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  EndLabel->Number        = LABEL_END;\r
-\r
-\r
-  //\r
-  // Resolve access policy information.\r
-  //\r
-  ResolveAccessPolicy ();\r
-\r
-  //\r
-  // Add access right one-of-code.\r
-  //\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-  DefaultOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (DefaultOpCodeHandle != NULL);\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_NORMAL),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    EFI_USER_INFO_ACCESS_ENROLL_SELF\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_ENROLL),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    EFI_USER_INFO_ACCESS_ENROLL_OTHERS\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_MANAGE),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    EFI_USER_INFO_ACCESS_MANAGE\r
-    );\r
-\r
-  HiiCreateDefaultOpCode (\r
-    DefaultOpCodeHandle,\r
-    EFI_HII_DEFAULT_CLASS_STANDARD,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    mAccessInfo.AccessRight\r
-    );\r
-\r
-  HiiCreateOneOfOpCode (\r
-    StartOpCodeHandle,                    // Container for dynamic created opcodes\r
-    KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_AP | KEY_MODIFY_RIGHT, // Question ID\r
-    0,                                    // VarStore ID\r
-    0,                                    // Offset in Buffer Storage\r
-    STRING_TOKEN (STR_ACCESS_RIGHT),      // Question prompt text\r
-    STRING_TOKEN (STR_ACCESS_RIGHT_HELP), // Question help text\r
-    EFI_IFR_FLAG_CALLBACK,                // Question flag\r
-    EFI_IFR_NUMERIC_SIZE_1,               // Data type of Question Value\r
-    OptionsOpCodeHandle,                  // Option Opcode list\r
-    DefaultOpCodeHandle                   // Default Opcode\r
-    );\r
-  HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-\r
-  //\r
-  // Add setup type one-of-code.\r
-  //\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-  DefaultOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (DefaultOpCodeHandle != NULL);\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_RESTRICTED),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    ACCESS_SETUP_RESTRICTED\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_NORMAL),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    ACCESS_SETUP_NORMAL\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_ADMIN),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    ACCESS_SETUP_ADMIN\r
-    );\r
-\r
-  HiiCreateDefaultOpCode (\r
-    DefaultOpCodeHandle,\r
-    EFI_HII_DEFAULT_CLASS_STANDARD,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    mAccessInfo.AccessSetup\r
-    );\r
-\r
-  HiiCreateOneOfOpCode (\r
-    StartOpCodeHandle,                    // Container for dynamic created opcodes\r
-    KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_AP | KEY_MODIFY_SETUP, // Question ID\r
-    0,                                    // VarStore ID\r
-    0,                                    // Offset in Buffer Storage\r
-    STRING_TOKEN (STR_ACCESS_SETUP),      // Question prompt text\r
-    STRING_TOKEN (STR_ACCESS_SETUP_HELP), // Question help text\r
-    EFI_IFR_FLAG_CALLBACK,                // Question flag\r
-    EFI_IFR_NUMERIC_SIZE_1,               // Data type of Question Value\r
-    OptionsOpCodeHandle,                  // Option Opcode list\r
-    DefaultOpCodeHandle                   // Default Opcode\r
-    );\r
-  HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-  //\r
-  // Add boot order one-of-code.\r
-  //\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-  DefaultOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (DefaultOpCodeHandle != NULL);\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_INSERT),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_4,\r
-    EFI_USER_INFO_ACCESS_BOOT_ORDER_INSERT\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_APPEND),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_4,\r
-    EFI_USER_INFO_ACCESS_BOOT_ORDER_APPEND\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_REPLACE),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_4,\r
-    EFI_USER_INFO_ACCESS_BOOT_ORDER_REPLACE\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_NODEFAULT),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_4,\r
-    EFI_USER_INFO_ACCESS_BOOT_ORDER_NODEFAULT\r
-    );\r
-\r
-  HiiCreateDefaultOpCode (\r
-    DefaultOpCodeHandle,\r
-    EFI_HII_DEFAULT_CLASS_STANDARD,\r
-    EFI_IFR_NUMERIC_SIZE_4,\r
-    mAccessInfo.AccessBootOrder\r
-    );\r
-\r
-  HiiCreateOneOfOpCode (\r
-    StartOpCodeHandle,                  // Container for dynamic created opcodes\r
-    KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_AP | KEY_MODIFY_BOOT, // Question ID\r
-    0,                                  // VarStore ID\r
-    0,                                  // Offset in Buffer Storage\r
-    STRING_TOKEN (STR_BOOR_ORDER),      // Question prompt text\r
-    STRING_TOKEN (STR_BOOT_ORDER_HELP), // Question help text\r
-    EFI_IFR_FLAG_CALLBACK,              // Question flag\r
-    EFI_IFR_NUMERIC_SIZE_1,             // Data type of Question Value\r
-    OptionsOpCodeHandle,                // Option Opcode list\r
-    DefaultOpCodeHandle                 // Default Opcode\r
-    );\r
-  HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-  //\r
-  // Update Form.\r
-  //\r
-  HiiUpdateForm (\r
-    mCallbackInfo->HiiHandle,           // HII handle\r
-    &gUserProfileManagerGuid,           // Formset GUID\r
-    FORMID_MODIFY_AP,                   // Form ID\r
-    StartOpCodeHandle,                  // Label for where to insert opcodes\r
-    EndOpCodeHandle                     // Replace data\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
-}\r
-\r
-\r
-/**\r
-  Expand access policy memory size.\r
-\r
-  @param[in] ValidLen       The valid access policy length.\r
-  @param[in] ExpandLen      The length that is needed to expand.\r
-\r
-**/\r
-VOID\r
-ExpandMemory (\r
-  IN      UINTN                                 ValidLen,\r
-  IN      UINTN                                 ExpandLen\r
-  )\r
-{\r
-  UINT8 *Mem;\r
-  UINTN Len;\r
-\r
-  //\r
-  // Expand memory.\r
-  //\r
-  Len = mUserInfo.AccessPolicyLen + (ExpandLen / 64 + 1) * 64;\r
-  Mem = AllocateZeroPool (Len);\r
-  ASSERT (Mem != NULL);\r
-\r
-  if (mUserInfo.AccessPolicy != NULL) {\r
-    CopyMem (Mem, mUserInfo.AccessPolicy, ValidLen);\r
-    FreePool (mUserInfo.AccessPolicy);\r
-  }\r
-\r
-  mUserInfo.AccessPolicy    = Mem;\r
-  mUserInfo.AccessPolicyLen = Len;\r
-}\r
-\r
-\r
-/**\r
-  Get the username from user input, and update username string in the Hii\r
-  database with it.\r
-\r
-**/\r
-VOID\r
-ModifyUserName (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS              Status;\r
-  CHAR16                  UserName[USER_NAME_LENGTH];\r
-  UINTN                   Len;\r
-  EFI_INPUT_KEY           Key;\r
-  EFI_USER_INFO_HANDLE    UserInfo;\r
-  EFI_USER_INFO           *Info;\r
-  EFI_USER_PROFILE_HANDLE TempUser;\r
-\r
-  //\r
-  // Get the new user name.\r
-  //\r
-  Len = sizeof (UserName);\r
-  Status = GetUserNameInput (&Len, UserName);\r
-  if (EFI_ERROR (Status)) {\r
-    if (Status != EFI_ABORTED) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"Failed To Get User Name.",\r
-        L"",\r
-        L"Please Press Any Key to Continue ...",\r
-        NULL\r
-        );\r
-    }\r
-    return ;\r
-  }\r
-\r
-  //\r
-  // Check whether the username had been used or not.\r
-  //\r
-  Info = AllocateZeroPool (sizeof (EFI_USER_INFO) + Len);\r
-  if (Info == NULL) {\r
-    return ;\r
-  }\r
-\r
-  Info->InfoType    = EFI_USER_INFO_NAME_RECORD;\r
-  Info->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |\r
-                      EFI_USER_INFO_PUBLIC |\r
-                      EFI_USER_INFO_EXCLUSIVE;\r
-  Info->InfoSize    = (UINT32) (sizeof (EFI_USER_INFO) + Len);\r
-  CopyMem ((UINT8 *) (Info + 1), UserName, Len);\r
-\r
-  TempUser  = NULL;\r
-  Status    = mUserManager->Find (\r
-                              mUserManager,\r
-                              &TempUser,\r
-                              NULL,\r
-                              Info,\r
-                              Info->InfoSize\r
-                              );\r
-  if (!EFI_ERROR (Status)) {\r
-    CreatePopUp (\r
-      EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-      &Key,\r
-      L"The User Name Had Been Used.",\r
-      L"",\r
-      L"Please Use Other User Name",\r
-      NULL\r
-      );\r
-    FreePool (Info);\r
-    return ;\r
-  }\r
-\r
-  //\r
-  // Update username display in the form.\r
-  //\r
-  CopyMem (mUserInfo.UserName, UserName, Len);\r
-  HiiSetString (\r
-    mCallbackInfo->HiiHandle,\r
-    STRING_TOKEN (STR_USER_NAME_VAL),\r
-    mUserInfo.UserName,\r
-    NULL\r
-    );\r
-\r
-  //\r
-  // Save the user name.\r
-  //\r
-  Status = FindInfoByType (mModifyUser, EFI_USER_INFO_NAME_RECORD, &UserInfo);\r
-  if (!EFI_ERROR (Status)) {\r
-    mUserManager->SetInfo (\r
-                    mUserManager,\r
-                    mModifyUser,\r
-                    &UserInfo,\r
-                    Info,\r
-                    Info->InfoSize\r
-                    );\r
-  }\r
-  FreePool (Info);\r
-}\r
-\r
-\r
-/**\r
-  Display the form of the modifying user identity policy.\r
-\r
-**/\r
-VOID\r
-ModifyIdentityPolicy (\r
-  VOID\r
-  )\r
-{\r
-  UINTN               Index;\r
-  CHAR16              *ProvStr;\r
-  EFI_STRING_ID       ProvID;\r
-  EFI_HII_HANDLE      HiiHandle;\r
-  VOID                *OptionsOpCodeHandle;\r
-  VOID                *StartOpCodeHandle;\r
-  VOID                *EndOpCodeHandle;\r
-  EFI_IFR_GUID_LABEL  *StartLabel;\r
-  EFI_IFR_GUID_LABEL  *EndLabel;\r
-\r
-  //\r
-  // Initialize the container for dynamic opcodes.\r
-  //\r
-  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (StartOpCodeHandle != NULL);\r
-\r
-  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (EndOpCodeHandle != NULL);\r
-\r
-  //\r
-  // Create Hii Extend Label OpCode.\r
-  //\r
-  StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                        StartOpCodeHandle,\r
-                                        &gEfiIfrTianoGuid,\r
-                                        NULL,\r
-                                        sizeof (EFI_IFR_GUID_LABEL)\r
-                                        );\r
-  StartLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  StartLabel->Number        = LABEL_IP_MOD_FUNC;\r
-\r
-  EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
-                                      EndOpCodeHandle,\r
-                                      &gEfiIfrTianoGuid,\r
-                                      NULL,\r
-                                      sizeof (EFI_IFR_GUID_LABEL)\r
-                                      );\r
-  EndLabel->ExtendOpCode  = EFI_IFR_EXTEND_OP_LABEL;\r
-  EndLabel->Number        = LABEL_END;\r
-\r
-  //\r
-  // Add credential providers\r
-  //.\r
-  if (mProviderInfo->Count > 0) {\r
-    OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-    ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-    //\r
-    // Add credential provider Option OpCode.\r
-    //\r
-    for (Index = 0; Index < mProviderInfo->Count; Index++) {\r
-      mProviderInfo->Provider[Index]->Title (\r
-                                        mProviderInfo->Provider[Index],\r
-                                        &HiiHandle,\r
-                                        &ProvID\r
-                                        );\r
-      ProvStr = HiiGetString (HiiHandle, ProvID, NULL);\r
-      ProvID  = HiiSetString (mCallbackInfo->HiiHandle, 0, ProvStr, NULL);\r
-      FreePool (ProvStr);\r
-      if (ProvID == 0) {\r
-        return ;\r
-      }\r
-\r
-      HiiCreateOneOfOptionOpCode (\r
-        OptionsOpCodeHandle,\r
-        ProvID,\r
-        0,\r
-        EFI_IFR_NUMERIC_SIZE_1,\r
-        (UINT8) Index\r
-        );\r
-    }\r
-\r
-    HiiCreateOneOfOpCode (\r
-      StartOpCodeHandle,                // Container for dynamic created opcodes\r
-      KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_IP | KEY_MODIFY_PROV,  // Question ID\r
-      0,                                // VarStore ID\r
-      0,                                // Offset in Buffer Storage\r
-      STRING_TOKEN (STR_PROVIDER),      // Question prompt text\r
-      STRING_TOKEN (STR_PROVIDER_HELP), // Question help text\r
-      EFI_IFR_FLAG_CALLBACK,            // Question flag\r
-      EFI_IFR_NUMERIC_SIZE_1,           // Data type of Question Value\r
-      OptionsOpCodeHandle,              // Option Opcode list\r
-      NULL                              // Default Opcode is NULl\r
-      );\r
-\r
-    HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-  }\r
-\r
-  //\r
-  // Add logical connector Option OpCode.\r
-  //\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_AND_CON),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    0\r
-    );\r
-\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_OR_CON),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    1\r
-    );\r
-\r
-  HiiCreateOneOfOpCode (\r
-    StartOpCodeHandle,                  // Container for dynamic created opcodes\r
-    KEY_MODIFY_USER | KEY_SELECT_USER | KEY_MODIFY_IP | KEY_MODIFY_CONN,  // Question ID\r
-    0,                                  // VarStore ID\r
-    0,                                  // Offset in Buffer Storage\r
-    STRING_TOKEN (STR_CONNECTOR),       // Question prompt text\r
-    STRING_TOKEN (STR_CONNECTOR_HELP),  // Question help text\r
-    EFI_IFR_FLAG_CALLBACK,              // Question flag\r
-    EFI_IFR_NUMERIC_SIZE_1,             // Data type of Question Value\r
-    OptionsOpCodeHandle,                // Option Opcode list\r
-    NULL                                // Default Opcode is NULl\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-  //\r
-  // Update identity policy in the form.\r
-  //\r
-  ResolveIdentityPolicy (\r
-    mUserInfo.IdentityPolicy,\r
-    mUserInfo.IdentityPolicyLen,\r
-    STRING_TOKEN (STR_IDENTIFY_POLICY_VALUE)\r
-    );\r
-\r
-  if (mUserInfo.NewIdentityPolicy != NULL) {\r
-    FreePool (mUserInfo.NewIdentityPolicy);\r
-    mUserInfo.NewIdentityPolicy         = NULL;\r
-    mUserInfo.NewIdentityPolicyLen      = 0;\r
-    mUserInfo.NewIdentityPolicyModified = FALSE;\r
-  }\r
-  mProviderChoice = 0;\r
-  mConncetLogical = 0;\r
-\r
-  HiiUpdateForm (\r
-    mCallbackInfo->HiiHandle, // HII handle\r
-    &gUserProfileManagerGuid, // Formset GUID\r
-    FORMID_MODIFY_IP,         // Form ID\r
-    StartOpCodeHandle,        // Label for where to insert opcodes\r
-    EndOpCodeHandle           // Replace data\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
-}\r
-\r
-\r
-/**\r
-  Get current user's access right.\r
-\r
-  @param[out]  AccessRight  Points to the buffer used for user's access right.\r
-\r
-  @retval EFI_SUCCESS       Get current user access right successfully.\r
-  @retval others            Fail to get current user access right.\r
-\r
-**/\r
-EFI_STATUS\r
-GetAccessRight (\r
-  OUT  UINT32                                    *AccessRight\r
-  )\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_USER_INFO_HANDLE          UserInfo;\r
-  EFI_USER_INFO                 *Info;\r
-  UINTN                         InfoSize;\r
-  UINTN                         MemSize;\r
-  EFI_USER_INFO_ACCESS_CONTROL  Access;\r
-  EFI_USER_PROFILE_HANDLE       CurrentUser;\r
-  UINTN                         TotalLen;\r
-  UINTN                         CheckLen;\r
-\r
-  //\r
-  // Allocate user information memory.\r
-  //\r
-  MemSize = sizeof (EFI_USER_INFO) + 63;\r
-  Info    = AllocateZeroPool (MemSize);\r
-  if (Info == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  //\r
-  // Get user access information.\r
-  //\r
-  UserInfo = NULL;\r
-  mUserManager->Current (mUserManager, &CurrentUser);\r
-  while (TRUE) {\r
-    InfoSize = MemSize;\r
-    //\r
-    // Get next user information.\r
-    //\r
-    Status = mUserManager->GetNextInfo (mUserManager, CurrentUser, &UserInfo);\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-\r
-    Status = mUserManager->GetInfo (\r
-                             mUserManager,\r
-                             CurrentUser,\r
-                             UserInfo,\r
-                             Info,\r
-                             &InfoSize\r
-                             );\r
-    if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      MemSize = InfoSize;\r
-      FreePool (Info);\r
-      Info = AllocateZeroPool (MemSize);\r
-      if (Info == NULL) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-      Status = mUserManager->GetInfo (\r
-                               mUserManager,\r
-                               CurrentUser,\r
-                               UserInfo,\r
-                               Info,\r
-                               &InfoSize\r
-                               );\r
-    }\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
-    }\r
-\r
-    //\r
-    // Check user information.\r
-    //\r
-    if (Info->InfoType == EFI_USER_INFO_ACCESS_POLICY_RECORD) {\r
-      TotalLen  = Info->InfoSize - sizeof (EFI_USER_INFO);\r
-      CheckLen  = 0;\r
-      //\r
-      // Get specified access information.\r
-      //\r
-      while (CheckLen < TotalLen) {\r
-        CopyMem (&Access, (UINT8 *) (Info + 1) + CheckLen, sizeof (Access));\r
-        if ((Access.Type == EFI_USER_INFO_ACCESS_ENROLL_SELF) ||\r
-            (Access.Type == EFI_USER_INFO_ACCESS_ENROLL_OTHERS) ||\r
-            (Access.Type == EFI_USER_INFO_ACCESS_MANAGE)\r
-            ) {\r
-          *AccessRight = Access.Type;\r
-          FreePool (Info);\r
-          return EFI_SUCCESS;\r
-        }\r
-        CheckLen += Access.Size;\r
-      }\r
-    }\r
-  }\r
-  FreePool (Info);\r
-  return EFI_NOT_FOUND;\r
-}\r
-\r