2 The functions to delete a user profile.
\r
4 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
\r
5 This program and the accompanying materials
\r
6 are licensed and made available under the terms and conditions of the BSD License
\r
7 which accompanies this distribution. The full text of the license may be found at
\r
8 http://opensource.org/licenses/bsd-license.php
\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
\r
15 #include "UserProfileManager.h"
\r
18 Get the username from the specified user.
\r
20 @param[in] User Handle of a user profile.
\r
22 @retval EFI_STRING_ID The String Id of the user's username.
\r
27 IN EFI_USER_PROFILE_HANDLE User
\r
31 EFI_USER_INFO_HANDLE UserInfo;
\r
32 EFI_USER_INFO *Info;
\r
36 CHAR16 UserName[USER_NAME_LENGTH];
\r
37 EFI_STRING_ID UserId;
\r
40 // Allocate user information memory.
\r
42 MemSize = sizeof (EFI_USER_INFO) + 63;
\r
43 Info = AllocateZeroPool (MemSize);
\r
44 ASSERT (Info != NULL);
\r
47 // Get user name information.
\r
53 // Get next user information.
\r
55 Status = mUserManager->GetNextInfo (
\r
60 if (EFI_ERROR (Status)) {
\r
64 Status = mUserManager->GetInfo (
\r
71 if (Status == EFI_BUFFER_TOO_SMALL) {
\r
74 Info = AllocateZeroPool (MemSize);
\r
75 ASSERT (Info != NULL);
\r
77 Status = mUserManager->GetInfo (
\r
86 // Check user information.
\r
88 if (Status == EFI_SUCCESS) {
\r
89 if (Info->InfoType == EFI_USER_INFO_NAME_RECORD) {
\r
90 NameLen = Info->InfoSize - sizeof (EFI_USER_INFO);
\r
91 if (NameLen > USER_NAME_LENGTH * sizeof (CHAR16)) {
\r
92 NameLen = USER_NAME_LENGTH * sizeof (CHAR16);
\r
94 ASSERT (NameLen >= sizeof (CHAR16));
\r
95 CopyMem (UserName, (UINT8 *) (Info + 1), NameLen);
\r
96 UserName[NameLen / sizeof (CHAR16) - 1] = 0;
\r
97 UserId = HiiSetString (
\r
98 mCallbackInfo->HiiHandle,
\r
117 Add a username item in form.
\r
119 @param[in] User Points to the user profile whose username is added.
\r
120 @param[in] Index The index of the user in the user name list
\r
121 @param[in] OpCodeHandle Points to container for dynamic created opcodes.
\r
126 IN EFI_USER_PROFILE_HANDLE User,
\r
128 IN VOID *OpCodeHandle
\r
131 EFI_STRING_ID NameId;
\r
136 NameId = GetUserName (User);
\r
142 // Create user name option.
\r
144 switch (Index & KEY_FIRST_FORM_MASK) {
\r
145 case KEY_MODIFY_USER:
\r
146 HiiCreateGotoOpCode (
\r
147 OpCodeHandle, // Container for dynamic created opcodes
\r
148 FORMID_USER_INFO, // Target Form ID
\r
149 NameId, // Prompt text
\r
150 STRING_TOKEN (STR_NULL_STRING), // Help text
\r
151 EFI_IFR_FLAG_CALLBACK, // Question flag
\r
152 Index // Question ID
\r
157 HiiCreateActionOpCode (
\r
158 OpCodeHandle, // Container for dynamic created opcodes
\r
159 Index, // Question ID
\r
160 NameId, // Prompt text
\r
161 STRING_TOKEN (STR_NULL_STRING), // Help text
\r
162 EFI_IFR_FLAG_CALLBACK, // Question flag
\r
163 0 // Action String ID
\r
174 Delete the user specified by UserIndex in user profile database.
\r
176 @param[in] UserIndex The index of user in the user name list
\r
186 EFI_USER_PROFILE_HANDLE User;
\r
188 EFI_USER_INFO_HANDLE UserInfo;
\r
189 EFI_USER_INFO *Info;
\r
193 // Find specified user profile and delete it.
\r
196 Status = mUserManager->GetNext (mUserManager, &User);
\r
197 if (EFI_ERROR (Status)) {
\r
201 while (UserIndex > 1) {
\r
202 Status = mUserManager->GetNext (mUserManager, &User);
\r
203 if (EFI_ERROR (Status)) {
\r
209 if (UserIndex == 1) {
\r
211 // Get the identification policy.
\r
213 Status = FindInfoByType (User, EFI_USER_INFO_IDENTITY_POLICY_RECORD, &UserInfo);
\r
214 if (EFI_ERROR (Status)) {
\r
220 Status = mUserManager->GetInfo (mUserManager, User, UserInfo, Info, &InfoSize);
\r
221 if (Status == EFI_BUFFER_TOO_SMALL) {
\r
222 Info = AllocateZeroPool (InfoSize);
\r
223 if (Info == NULL) {
\r
226 Status = mUserManager->GetInfo (mUserManager, User, UserInfo, Info, &InfoSize);
\r
230 // Delete the user on the credential providers by its identification policy.
\r
232 ASSERT (Info != NULL);
\r
233 DeleteCredentialFromProviders ((UINT8 *)(Info + 1), Info->InfoSize - sizeof (EFI_USER_INFO), User);
\r
236 Status = mUserManager->Delete (mUserManager, User);
\r
237 if (EFI_ERROR (Status)) {
\r
241 EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
\r
243 L"Delete User Succeed!",
\r
245 L"Please Press Any Key to Continue ...",
\r
253 EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
\r
255 L"Delete User Failed!",
\r
257 L"Please Press Any Key to Continue ...",
\r
264 Display user select form, cab select a user to delete.
\r
268 SelectUserToDelete (
\r
274 EFI_USER_PROFILE_HANDLE User;
\r
275 EFI_USER_PROFILE_HANDLE CurrentUser;
\r
276 VOID *StartOpCodeHandle;
\r
277 VOID *EndOpCodeHandle;
\r
278 EFI_IFR_GUID_LABEL *StartLabel;
\r
279 EFI_IFR_GUID_LABEL *EndLabel;
\r
282 // Initialize the container for dynamic opcodes.
\r
284 StartOpCodeHandle = HiiAllocateOpCodeHandle ();
\r
285 ASSERT (StartOpCodeHandle != NULL);
\r
287 EndOpCodeHandle = HiiAllocateOpCodeHandle ();
\r
288 ASSERT (EndOpCodeHandle != NULL);
\r
291 // Create Hii Extend Label OpCode.
\r
293 StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (
\r
297 sizeof (EFI_IFR_GUID_LABEL)
\r
299 StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
\r
300 StartLabel->Number = LABEL_USER_DEL_FUNC;
\r
302 EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (
\r
306 sizeof (EFI_IFR_GUID_LABEL)
\r
308 EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
\r
309 EndLabel->Number = LABEL_END;
\r
312 // Add each user can be deleted.
\r
316 mUserManager->Current (mUserManager, &CurrentUser);
\r
318 Status = mUserManager->GetNext (mUserManager, &User);
\r
319 if (EFI_ERROR (Status)) {
\r
323 if (User != CurrentUser) {
\r
326 (UINT16)(KEY_DEL_USER | KEY_SELECT_USER | Index),
\r
334 mCallbackInfo->HiiHandle, // HII handle
\r
335 &gUserProfileManagerGuid, // Formset GUID
\r
336 FORMID_DEL_USER, // Form ID
\r
337 StartOpCodeHandle, // Label for where to insert opcodes
\r
338 EndOpCodeHandle // Replace data
\r
341 HiiFreeOpCodeHandle (StartOpCodeHandle);
\r
342 HiiFreeOpCodeHandle (EndOpCodeHandle);
\r