2 The functions to add a user profile.
4 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "UserProfileManager.h"
19 Get user name from the popup windows.
21 @param[in, out] UserNameLen On entry, point to UserName buffer lengh, in bytes.
22 On exit, point to input user name length, in bytes.
23 @param[out] UserName The buffer to hold the input user name.
25 @retval EFI_ABORTED It is given up by pressing 'ESC' key.
26 @retval EFI_NOT_READY Not a valid input at all.
27 @retval EFI_SUCCESS Get a user name successfully.
32 IN OUT UINTN
*UserNameLen
,
38 CHAR16 Name
[USER_NAME_LENGTH
];
43 Name
[NameLen
+ 1] = L
'\0';
45 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
48 L
"---------------------",
55 if (Key
.ScanCode
== SCAN_NULL
) {
56 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
58 // Add the null terminator.
63 } else if ((Key
.UnicodeChar
== CHAR_NULL
) ||
64 (Key
.UnicodeChar
== CHAR_TAB
) ||
65 (Key
.UnicodeChar
== CHAR_LINEFEED
)
69 if (Key
.UnicodeChar
== CHAR_BACKSPACE
) {
74 Name
[NameLen
] = Key
.UnicodeChar
;
76 if (NameLen
+ 1 == USER_NAME_LENGTH
) {
78 // Add the null terminator.
88 if (Key
.ScanCode
== SCAN_ESC
) {
97 if (*UserNameLen
< NameLen
* sizeof (CHAR16
)) {
101 *UserNameLen
= NameLen
* sizeof (CHAR16
);
102 CopyMem (UserName
, Name
, *UserNameLen
);
108 Set a user's username.
110 @param[in] User Handle of a user profile .
111 @param[in] UserNameLen The lengh of UserName.
112 @param[in] UserName Point to the buffer of user name.
114 @retval EFI_NOT_READY The usernme in mAddUserName had been used.
115 @retval EFI_SUCCESS Change the user's username successfully with
116 username in mAddUserName.
121 IN EFI_USER_PROFILE_HANDLE User
,
122 IN UINTN UserNameLen
,
127 EFI_USER_INFO_HANDLE UserInfo
;
128 EFI_USER_PROFILE_HANDLE TempUser
;
129 EFI_USER_INFO
*NewUserInfo
;
131 NewUserInfo
= AllocateZeroPool (sizeof (EFI_USER_INFO
) + UserNameLen
);
132 ASSERT (NewUserInfo
!= NULL
);
134 NewUserInfo
->InfoType
= EFI_USER_INFO_NAME_RECORD
;
135 NewUserInfo
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
136 EFI_USER_INFO_PUBLIC
|
137 EFI_USER_INFO_EXCLUSIVE
;
138 NewUserInfo
->InfoSize
= (UINT32
) (sizeof (EFI_USER_INFO
) + UserNameLen
);
139 CopyMem ((UINT8
*) (NewUserInfo
+ 1), UserName
, UserNameLen
);
141 Status
= mUserManager
->Find (
146 NewUserInfo
->InfoSize
148 if (!EFI_ERROR (Status
)) {
150 // The user name had been used, return error.
152 FreePool (NewUserInfo
);
153 return EFI_NOT_READY
;
157 mUserManager
->SetInfo (
162 NewUserInfo
->InfoSize
164 FreePool (NewUserInfo
);
170 Set create date of the specified user.
172 @param[in] User Handle of a user profile.
177 IN EFI_USER_PROFILE_HANDLE User
181 EFI_USER_INFO_HANDLE UserInfo
;
182 EFI_USER_INFO_CREATE_DATE Date
;
183 EFI_USER_INFO
*NewUserInfo
;
185 NewUserInfo
= AllocateZeroPool (
186 sizeof (EFI_USER_INFO
) +
187 sizeof (EFI_USER_INFO_CREATE_DATE
)
189 ASSERT (NewUserInfo
!= NULL
);
191 NewUserInfo
->InfoType
= EFI_USER_INFO_CREATE_DATE_RECORD
;
192 NewUserInfo
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
193 EFI_USER_INFO_PUBLIC
|
194 EFI_USER_INFO_EXCLUSIVE
;
195 NewUserInfo
->InfoSize
= sizeof (EFI_USER_INFO
) + sizeof (EFI_USER_INFO_CREATE_DATE
);
196 Status
= gRT
->GetTime (&Date
, NULL
);
197 if (EFI_ERROR (Status
)) {
198 FreePool (NewUserInfo
);
202 CopyMem ((UINT8
*) (NewUserInfo
+ 1), &Date
, sizeof (EFI_USER_INFO_CREATE_DATE
));
204 mUserManager
->SetInfo (
209 NewUserInfo
->InfoSize
211 FreePool (NewUserInfo
);
216 Set the default identity policy of the specified user.
218 @param[in] User Handle of a user profile.
223 IN EFI_USER_PROFILE_HANDLE User
226 EFI_USER_INFO_IDENTITY_POLICY
*Policy
;
227 EFI_USER_INFO_HANDLE UserInfo
;
228 EFI_USER_INFO
*NewUserInfo
;
230 NewUserInfo
= AllocateZeroPool (
231 sizeof (EFI_USER_INFO
) +
232 sizeof (EFI_USER_INFO_IDENTITY_POLICY
)
234 ASSERT (NewUserInfo
!= NULL
);
236 Policy
= (EFI_USER_INFO_IDENTITY_POLICY
*) (NewUserInfo
+ 1);
237 Policy
->Type
= EFI_USER_INFO_IDENTITY_TRUE
;
238 Policy
->Length
= sizeof (EFI_USER_INFO_IDENTITY_POLICY
);
240 NewUserInfo
->InfoType
= EFI_USER_INFO_IDENTITY_POLICY_RECORD
;
241 NewUserInfo
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
242 EFI_USER_INFO_PUBLIC
|
243 EFI_USER_INFO_EXCLUSIVE
;
244 NewUserInfo
->InfoSize
= sizeof (EFI_USER_INFO
) + Policy
->Length
;
246 mUserManager
->SetInfo (
251 NewUserInfo
->InfoSize
253 FreePool (NewUserInfo
);
258 Set the default access policy of the specified user.
260 @param[in] User Handle of a user profile.
265 IN EFI_USER_PROFILE_HANDLE User
268 EFI_USER_INFO_ACCESS_CONTROL
*Control
;
269 EFI_USER_INFO_HANDLE UserInfo
;
270 EFI_USER_INFO
*NewUserInfo
;
272 NewUserInfo
= AllocateZeroPool (
273 sizeof (EFI_USER_INFO
) +
274 sizeof (EFI_USER_INFO_ACCESS_CONTROL
)
276 ASSERT (NewUserInfo
!= NULL
);
278 Control
= (EFI_USER_INFO_ACCESS_CONTROL
*) (NewUserInfo
+ 1);
279 Control
->Type
= EFI_USER_INFO_ACCESS_ENROLL_SELF
;
280 Control
->Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
);
282 NewUserInfo
->InfoType
= EFI_USER_INFO_ACCESS_POLICY_RECORD
;
283 NewUserInfo
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
284 EFI_USER_INFO_PUBLIC
|
285 EFI_USER_INFO_EXCLUSIVE
;
286 NewUserInfo
->InfoSize
= sizeof (EFI_USER_INFO
) + Control
->Size
;
288 mUserManager
->SetInfo (
293 NewUserInfo
->InfoSize
295 FreePool (NewUserInfo
);
300 Add a new user profile into the user profile database.
310 EFI_USER_PROFILE_HANDLE User
;
312 CHAR16 UserName
[USER_NAME_LENGTH
];
320 // Get user name to add.
322 UserNameLen
= sizeof (UserName
);
323 Status
= GetUserNameInput (&UserNameLen
, UserName
);
324 if (EFI_ERROR (Status
)) {
325 if (Status
!= EFI_ABORTED
) {
326 QuestionStr
= GetStringById (STRING_TOKEN (STR_GET_USERNAME_FAILED
));
327 PromptStr
= GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE
));
334 // Create a new user profile.
337 Status
= mUserManager
->Create (mUserManager
, &User
);
338 if (EFI_ERROR (Status
)) {
339 QuestionStr
= GetStringById (STRING_TOKEN (STR_CREATE_PROFILE_FAILED
));
340 PromptStr
= GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE
));
343 // Add default user information.
345 Status
= SetUserName (User
, UserNameLen
, UserName
);
346 if (EFI_ERROR (Status
)) {
347 QuestionStr
= GetStringById (STRING_TOKEN (STR_USER_ALREADY_EXISTED
));
348 PromptStr
= GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE
));
352 SetCreateDate (User
);
353 SetIdentityPolicy (User
);
354 SetAccessPolicy (User
);
356 QuestionStr
= GetStringById (STRING_TOKEN (STR_CREATE_PROFILE_SUCCESS
));
357 PromptStr
= GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE
));
362 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
369 FreePool (QuestionStr
);
370 FreePool (PromptStr
);