4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The functions to delete a user profile.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "UserProfileManager.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the username from the specified user.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] User Handle of a user profile.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_STRING_ID The String Id of the user's username.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STRING_ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetUserName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USER_PROFILE_HANDLE User
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_INFO_HANDLE UserInfo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_INFO *Info;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN InfoSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN MemSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NameLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 UserName[USER_NAME_LENGTH];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STRING_ID UserId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Allocate user information memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MemSize = sizeof (EFI_USER_INFO) + 63;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = AllocateZeroPool (MemSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Info != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get user name information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserInfo = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (TRUE) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfoSize = MemSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get next user information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetNextInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mUserManager,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync User,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &UserInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mUserManager,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync User,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserInfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &InfoSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_BUFFER_TOO_SMALL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MemSize = InfoSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Info);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = AllocateZeroPool (MemSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Info != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mUserManager,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync User,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserInfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &InfoSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Check user information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_SUCCESS) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Info->InfoType == EFI_USER_INFO_NAME_RECORD) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NameLen = Info->InfoSize - sizeof (EFI_USER_INFO);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (NameLen > USER_NAME_LENGTH * sizeof (CHAR16)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NameLen = USER_NAME_LENGTH * sizeof (CHAR16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (NameLen >= sizeof (CHAR16));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (UserName, (UINT8 *) (Info + 1), NameLen);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserName[NameLen / sizeof (CHAR16) - 1] = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserId = HiiSetString (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mCallbackInfo->HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (UserId != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Info);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UserId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Info);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Add a username item in form.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] User Points to the user profile whose username is added.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Index The index of the user in the user name list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] OpCodeHandle Points to container for dynamic created opcodes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAddUserToForm (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USER_PROFILE_HANDLE User,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Index,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *OpCodeHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STRING_ID NameId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get user name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NameId = GetUserName (User);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (NameId == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Create user name option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (Index & KEY_FIRST_FORM_MASK) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case KEY_MODIFY_USER:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiCreateGotoOpCode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OpCodeHandle, // Container for dynamic created opcodes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FORMID_USER_INFO, // Target Form ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NameId, // Prompt text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_NULL_STRING), // Help text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IFR_FLAG_CALLBACK, // Question flag
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index // Question ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case KEY_DEL_USER:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiCreateActionOpCode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OpCodeHandle, // Container for dynamic created opcodes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index, // Question ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NameId, // Prompt text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_NULL_STRING), // Help text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IFR_FLAG_CALLBACK, // Question flag
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0 // Action String ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Delete the user specified by UserIndex in user profile database.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] UserIndex The index of user in the user name list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to be deleted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDeleteUser (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 UserIndex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_PROFILE_HANDLE User;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_INPUT_KEY Key;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_INFO_HANDLE UserInfo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_INFO *Info;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN InfoSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Find specified user profile and delete it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync User = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetNext (mUserManager, &User);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (UserIndex > 1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetNext (mUserManager, &User);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UserIndex--;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (UserIndex == 1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the identification policy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = FindInfoByType (User, EFI_USER_INFO_IDENTITY_POLICY_RECORD, &UserInfo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfoSize = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetInfo (mUserManager, User, UserInfo, Info, &InfoSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_BUFFER_TOO_SMALL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = AllocateZeroPool (InfoSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Info == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetInfo (mUserManager, User, UserInfo, Info, &InfoSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Delete the user on the credential providers by its identification policy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Info != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeleteCredentialFromProviders ((UINT8 *)(Info + 1), Info->InfoSize - sizeof (EFI_USER_INFO), User);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (Info);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->Delete (mUserManager, User);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CreatePopUp (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &Key,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"Delete User Succeed!",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"Please Press Any Key to Continue ...",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDone:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CreatePopUp (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &Key,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"Delete User Failed!",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"Please Press Any Key to Continue ...",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display user select form, cab select a user to delete.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSelectUserToDelete (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_PROFILE_HANDLE User;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USER_PROFILE_HANDLE CurrentUser;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *StartOpCodeHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *EndOpCodeHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IFR_GUID_LABEL *StartLabel;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IFR_GUID_LABEL *EndLabel;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Initialize the container for dynamic opcodes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartOpCodeHandle = HiiAllocateOpCodeHandle ();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (StartOpCodeHandle != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndOpCodeHandle = HiiAllocateOpCodeHandle ();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (EndOpCodeHandle != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Create Hii Extend Label OpCode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartOpCodeHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiIfrTianoGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sizeof (EFI_IFR_GUID_LABEL)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartLabel->Number = LABEL_USER_DEL_FUNC;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndOpCodeHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiIfrTianoGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sizeof (EFI_IFR_GUID_LABEL)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndLabel->Number = LABEL_END;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Add each user can be deleted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync User = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mUserManager->Current (mUserManager, &CurrentUser);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (TRUE) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = mUserManager->GetNext (mUserManager, &User);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (User != CurrentUser) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AddUserToForm (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync User,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16)(KEY_DEL_USER | KEY_SELECT_USER | Index),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartOpCodeHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiUpdateForm (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mCallbackInfo->HiiHandle, // HII handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gUserProfileManagerGuid, // Formset GUID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FORMID_DEL_USER, // Form ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartOpCodeHandle, // Label for where to insert opcodes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndOpCodeHandle // Replace data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiFreeOpCodeHandle (StartOpCodeHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiFreeOpCodeHandle (EndOpCodeHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}