2 The functions to modify a user profile.
4 Copyright (c) 2009 - 2010, 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"
17 EFI_USER_PROFILE_HANDLE mModifyUser
= NULL
;
20 Display user select form, cab select a user to modify.
30 EFI_USER_PROFILE_HANDLE User
;
31 EFI_USER_PROFILE_HANDLE CurrentUser
;
32 UINT32 CurrentAccessRight
;
33 VOID
*StartOpCodeHandle
;
34 VOID
*EndOpCodeHandle
;
35 EFI_IFR_GUID_LABEL
*StartLabel
;
36 EFI_IFR_GUID_LABEL
*EndLabel
;
39 // Initialize the container for dynamic opcodes.
41 StartOpCodeHandle
= HiiAllocateOpCodeHandle ();
42 ASSERT (StartOpCodeHandle
!= NULL
);
44 EndOpCodeHandle
= HiiAllocateOpCodeHandle ();
45 ASSERT (EndOpCodeHandle
!= NULL
);
48 // Create Hii Extend Label OpCode.
50 StartLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
54 sizeof (EFI_IFR_GUID_LABEL
)
56 StartLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
57 StartLabel
->Number
= LABEL_USER_MOD_FUNC
;
59 EndLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
63 sizeof (EFI_IFR_GUID_LABEL
)
65 EndLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
66 EndLabel
->Number
= LABEL_END
;
69 // Add each user can be modified.
73 mUserManager
->Current (mUserManager
, &CurrentUser
);
75 Status
= mUserManager
->GetNext (mUserManager
, &User
);
76 if (EFI_ERROR (Status
)) {
80 Status
= GetAccessRight (&CurrentAccessRight
);
81 if (EFI_ERROR (Status
)) {
82 CurrentAccessRight
= EFI_USER_INFO_ACCESS_ENROLL_SELF
;
85 if ((CurrentAccessRight
== EFI_USER_INFO_ACCESS_MANAGE
) || (User
== CurrentUser
)) {
86 AddUserToForm (User
, (UINT16
)(KEY_MODIFY_USER
| KEY_SELECT_USER
| Index
), StartOpCodeHandle
);
92 mCallbackInfo
->HiiHandle
, // HII handle
93 &mUserProfileManagerGuid
, // Formset GUID
94 FORMID_MODIFY_USER
, // Form ID
95 StartOpCodeHandle
, // Label for where to insert opcodes
96 EndOpCodeHandle
// Replace data
99 HiiFreeOpCodeHandle (StartOpCodeHandle
);
100 HiiFreeOpCodeHandle (EndOpCodeHandle
);
105 Get all the user info from mModifyUser in the user manager, and save on the
115 EFI_USER_INFO_HANDLE UserInfo
;
122 // Init variable to default value.
127 mUserInfo
.CreateDateExist
= FALSE
;
128 mUserInfo
.UsageDateExist
= FALSE
;
129 mUserInfo
.UsageCount
= 0;
131 mUserInfo
.AccessPolicyLen
= 0;
132 mUserInfo
.AccessPolicyModified
= FALSE
;
133 if (mUserInfo
.AccessPolicy
!= NULL
) {
134 FreePool (mUserInfo
.AccessPolicy
);
135 mUserInfo
.AccessPolicy
= NULL
;
137 mUserInfo
.IdentityPolicyLen
= 0;
138 mUserInfo
.IdentityPolicyModified
= FALSE
;
139 if (mUserInfo
.IdentityPolicy
!= NULL
) {
140 FreePool (mUserInfo
.IdentityPolicy
);
141 mUserInfo
.IdentityPolicy
= NULL
;
145 // Allocate user information memory.
147 MemSize
= sizeof (EFI_USER_INFO
) + 63;
148 Info
= AllocateZeroPool (MemSize
);
154 // Get each user information.
158 Status
= mUserManager
->GetNextInfo (mUserManager
, mModifyUser
, &UserInfo
);
159 if (EFI_ERROR (Status
)) {
166 Status
= mUserManager
->GetInfo (
173 if (Status
== EFI_BUFFER_TOO_SMALL
) {
176 Info
= AllocateZeroPool (MemSize
);
181 Status
= mUserManager
->GetInfo (
190 if (Status
== EFI_SUCCESS
) {
192 // Deal with each information according to informaiton type.
194 DataLen
= Info
->InfoSize
- sizeof (EFI_USER_INFO
);
195 switch (Info
->InfoType
) {
196 case EFI_USER_INFO_NAME_RECORD
:
197 CopyMem (&mUserInfo
.UserName
, (UINT8
*) (Info
+ 1), DataLen
);
200 case EFI_USER_INFO_CREATE_DATE_RECORD
:
201 CopyMem (&mUserInfo
.CreateDate
, (UINT8
*) (Info
+ 1), DataLen
);
202 mUserInfo
.CreateDateExist
= TRUE
;
205 case EFI_USER_INFO_USAGE_DATE_RECORD
:
206 CopyMem (&mUserInfo
.UsageDate
, (UINT8
*) (Info
+ 1), DataLen
);
207 mUserInfo
.UsageDateExist
= TRUE
;
210 case EFI_USER_INFO_USAGE_COUNT_RECORD
:
211 CopyMem (&mUserInfo
.UsageCount
, (UINT8
*) (Info
+ 1), DataLen
);
214 case EFI_USER_INFO_ACCESS_POLICY_RECORD
:
215 mUserInfo
.AccessPolicy
= AllocateZeroPool (DataLen
);
216 if (mUserInfo
.AccessPolicy
== NULL
) {
220 CopyMem (mUserInfo
.AccessPolicy
, (UINT8
*) (Info
+ 1), DataLen
);
221 mUserInfo
.AccessPolicyLen
= DataLen
;
224 case EFI_USER_INFO_IDENTITY_POLICY_RECORD
:
225 mUserInfo
.IdentityPolicy
= AllocateZeroPool (DataLen
);
226 if (mUserInfo
.IdentityPolicy
== NULL
) {
230 CopyMem (mUserInfo
.IdentityPolicy
, (UINT8
*) (Info
+ 1), DataLen
);
231 mUserInfo
.IdentityPolicyLen
= DataLen
;
244 Convert the Date to a string, and update the Hii database DateID string with it.
246 @param[in] Date Points to the date to be converted.
247 @param[in] DateId String ID in the HII database to be replaced.
253 IN EFI_STRING_ID DateId
260 // Convert date to string.
263 Str
= AllocateZeroPool (DateBufLen
);
278 // Convert time to string.
280 DateBufLen
-= StrLen (Str
);
290 HiiSetString (mCallbackInfo
->HiiHandle
, DateId
, Str
, NULL
);
296 Convert the CountVal to a string, and update the Hii database CountId string
299 @param[in] CountVal The hex value to convert.
300 @param[in] CountId String ID in the HII database to be replaced.
306 IN EFI_STRING_ID CountId
311 UnicodeSPrint (Count
, 20, L
"%d", CountVal
);
312 HiiSetString (mCallbackInfo
->HiiHandle
, CountId
, Count
, NULL
);
317 Concatenates one Null-terminated Unicode string to another Null-terminated
320 @param[in, out] Source1 On entry, point to a Null-terminated Unicode string.
321 On exit, point to a new concatenated Unicode string
322 @param[in] Source2 Pointer to a Null-terminated Unicode string.
327 IN OUT CHAR16
**Source1
,
328 IN CONST CHAR16
*Source2
334 ASSERT (Source1
!= NULL
);
335 ASSERT (Source2
!= NULL
);
337 if (*Source1
== NULL
) {
338 StrLength
= StrSize (Source2
);
340 StrLength
= StrSize (*Source1
);
341 StrLength
+= StrSize (Source2
) -1;
344 TmpStr
= AllocateZeroPool (StrLength
);
345 ASSERT (TmpStr
!= NULL
);
347 if (*Source1
== NULL
) {
348 StrCpy (TmpStr
, Source2
);;
350 StrCpy (TmpStr
, *Source1
);
352 StrCat (TmpStr
, Source2
);
360 Convert the identity policy to a unicode string and update the Hii database
361 IpStringId string with it.
363 @param[in] Ip Points to identity policy.
364 @param[in] IpLen The identity policy length.
365 @param[in] IpStringId String ID in the HII database to be replaced.
369 ResolveIdentityPolicy (
372 IN EFI_STRING_ID IpStringId
377 EFI_USER_INFO_IDENTITY_POLICY
*Identity
;
380 EFI_STRING_ID ProvId
;
381 EFI_HII_HANDLE HiiHandle
;
382 EFI_USER_CREDENTIAL_PROTOCOL
*UserCredential
;
387 // Resolve each policy.
390 while (ChkLen
< IpLen
) {
391 Identity
= (EFI_USER_INFO_IDENTITY_POLICY
*) (Ip
+ ChkLen
);
392 switch (Identity
->Type
) {
393 case EFI_USER_INFO_IDENTITY_FALSE
:
394 AddStr (&TmpStr
, L
"False");
397 case EFI_USER_INFO_IDENTITY_TRUE
:
398 AddStr (&TmpStr
, L
"None");
401 case EFI_USER_INFO_IDENTITY_NOT
:
402 AddStr (&TmpStr
, L
"! ");
405 case EFI_USER_INFO_IDENTITY_AND
:
406 AddStr (&TmpStr
, L
" && ");
409 case EFI_USER_INFO_IDENTITY_OR
:
410 AddStr (&TmpStr
, L
" || ");
413 case EFI_USER_INFO_IDENTITY_CREDENTIAL_TYPE
:
414 for (Index
= 0; Index
< mProviderInfo
->Count
; Index
++) {
415 UserCredential
= mProviderInfo
->Provider
[Index
];
416 if (CompareGuid ((EFI_GUID
*) (Identity
+ 1), &UserCredential
->Type
)) {
417 UserCredential
->Title (
422 ProvStr
= HiiGetString (HiiHandle
, ProvId
, NULL
);
423 if (ProvStr
!= NULL
) {
424 AddStr (&TmpStr
, ProvStr
);
432 case EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER
:
433 for (Index
= 0; Index
< mProviderInfo
->Count
; Index
++) {
434 UserCredential
= mProviderInfo
->Provider
[Index
];
435 if (CompareGuid ((EFI_GUID
*) (Identity
+ 1), &UserCredential
->Identifier
)) {
436 UserCredential
->Title (
441 ProvStr
= HiiGetString (HiiHandle
, ProvId
, NULL
);
442 if (ProvStr
!= NULL
) {
443 AddStr (&TmpStr
, ProvStr
);
452 ChkLen
+= Identity
->Length
;
455 if (TmpStr
!= NULL
) {
456 HiiSetString (mCallbackInfo
->HiiHandle
, IpStringId
, TmpStr
, NULL
);
463 Display modify user information form.
465 This form displays, username, create Date, usage date, usage count, identity policy,
468 @param[in] UserIndex The index of the user in display list to modify.
477 EFI_USER_PROFILE_HANDLE CurrentUser
;
478 UINT32 CurrentAccessRight
;
479 VOID
*StartOpCodeHandle
;
480 VOID
*EndOpCodeHandle
;
481 EFI_IFR_GUID_LABEL
*StartLabel
;
482 EFI_IFR_GUID_LABEL
*EndLabel
;
485 // Initialize the container for dynamic opcodes.
487 StartOpCodeHandle
= HiiAllocateOpCodeHandle ();
488 ASSERT (StartOpCodeHandle
!= NULL
);
490 EndOpCodeHandle
= HiiAllocateOpCodeHandle ();
491 ASSERT (EndOpCodeHandle
!= NULL
);
494 // Create Hii Extend Label OpCode.
496 StartLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
500 sizeof (EFI_IFR_GUID_LABEL
)
502 StartLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
503 StartLabel
->Number
= LABEL_USER_INFO_FUNC
;
505 EndLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
509 sizeof (EFI_IFR_GUID_LABEL
)
511 EndLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
512 EndLabel
->Number
= LABEL_END
;
515 // Find the user profile to be modified.
518 Status
= mUserManager
->GetNext (mUserManager
, &mModifyUser
);
519 if (EFI_ERROR (Status
)) {
523 while (UserIndex
> 1) {
524 Status
= mUserManager
->GetNext (mUserManager
, &mModifyUser
);
525 if (EFI_ERROR (Status
)) {
532 // Get user profile information.
539 mCallbackInfo
->HiiHandle
,
540 STRING_TOKEN (STR_USER_NAME_VAL
),
546 // Update create date.
548 if (mUserInfo
.CreateDateExist
) {
549 ResolveDate (&mUserInfo
.CreateDate
, STRING_TOKEN (STR_CREATE_DATE_VAL
));
552 mCallbackInfo
->HiiHandle
,
553 STRING_TOKEN (STR_CREATE_DATE_VAL
),
562 if (mUserInfo
.UsageDateExist
) {
563 ResolveDate (&mUserInfo
.UsageDate
, STRING_TOKEN (STR_USAGE_DATE_VAL
));
566 mCallbackInfo
->HiiHandle
,
567 STRING_TOKEN (STR_USAGE_DATE_VAL
),
576 ResolveCount ((UINT32
) mUserInfo
.UsageCount
, STRING_TOKEN (STR_USAGE_COUNT_VAL
));
579 // Add identity policy.
581 mUserManager
->Current (mUserManager
, &CurrentUser
);
582 if (mModifyUser
== CurrentUser
) {
583 ResolveIdentityPolicy (
584 mUserInfo
.IdentityPolicy
,
585 mUserInfo
.IdentityPolicyLen
,
586 STRING_TOKEN (STR_IDENTIFY_POLICY_VAL
)
588 HiiCreateGotoOpCode (
589 StartOpCodeHandle
, // Container for opcodes
590 FORMID_MODIFY_IP
, // Target Form ID
591 STRING_TOKEN (STR_IDENTIFY_POLICY
), // Prompt text
592 STRING_TOKEN (STR_IDENTIFY_POLICY_VAL
), // Help text
593 EFI_IFR_FLAG_CALLBACK
, // Question flag
594 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_IP
// Question ID
599 // Add access policy.
601 Status
= GetAccessRight (&CurrentAccessRight
);
602 if (EFI_ERROR (Status
)) {
603 CurrentAccessRight
= EFI_USER_INFO_ACCESS_ENROLL_SELF
;
606 if (CurrentAccessRight
== EFI_USER_INFO_ACCESS_MANAGE
) {
607 HiiCreateGotoOpCode (
608 StartOpCodeHandle
, // Container for opcodes
609 FORMID_MODIFY_AP
, // Target Form ID
610 STRING_TOKEN (STR_ACCESS_POLICY
), // Prompt text
611 STRING_TOKEN (STR_NULL_STRING
), // Help text
612 EFI_IFR_FLAG_CALLBACK
, // Question flag
613 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_AP
// Question ID
618 mCallbackInfo
->HiiHandle
, // HII handle
619 &mUserProfileManagerGuid
, // Formset GUID
620 FORMID_USER_INFO
, // Form ID
621 StartOpCodeHandle
, // Label
622 EndOpCodeHandle
// Replace data
625 HiiFreeOpCodeHandle (StartOpCodeHandle
);
626 HiiFreeOpCodeHandle (EndOpCodeHandle
);
631 Get all the access policy info from current user info, and save in the global
636 ResolveAccessPolicy (
641 EFI_USER_INFO_ACCESS_CONTROL Control
;
648 mAccessInfo
.AccessRight
= EFI_USER_INFO_ACCESS_ENROLL_SELF
;
649 mAccessInfo
.AccessSetup
= ACCESS_SETUP_RESTRICTED
;
650 mAccessInfo
.AccessBootOrder
= EFI_USER_INFO_ACCESS_BOOT_ORDER_INSERT
;
652 mAccessInfo
.LoadPermitLen
= 0;
653 mAccessInfo
.LoadForbidLen
= 0;
654 mAccessInfo
.ConnectPermitLen
= 0;
655 mAccessInfo
.ConnectForbidLen
= 0;
658 // Get each user access policy.
661 while (OffSet
< mUserInfo
.AccessPolicyLen
) {
662 CopyMem (&Control
, mUserInfo
.AccessPolicy
+ OffSet
, sizeof (Control
));
663 ValLen
= Control
.Size
- sizeof (Control
);
664 switch (Control
.Type
) {
665 case EFI_USER_INFO_ACCESS_ENROLL_SELF
:
666 mAccessInfo
.AccessRight
= EFI_USER_INFO_ACCESS_ENROLL_SELF
;
669 case EFI_USER_INFO_ACCESS_ENROLL_OTHERS
:
670 mAccessInfo
.AccessRight
= EFI_USER_INFO_ACCESS_ENROLL_OTHERS
;
673 case EFI_USER_INFO_ACCESS_MANAGE
:
674 mAccessInfo
.AccessRight
= EFI_USER_INFO_ACCESS_MANAGE
;
677 case EFI_USER_INFO_ACCESS_SETUP
:
678 AccessData
= mUserInfo
.AccessPolicy
+ OffSet
+ sizeof (Control
);
679 if (CompareGuid ((EFI_GUID
*) AccessData
, &gEfiUserInfoAccessSetupNormalGuid
)) {
680 mAccessInfo
.AccessSetup
= ACCESS_SETUP_NORMAL
;
681 } else if (CompareGuid ((EFI_GUID
*) AccessData
, &gEfiUserInfoAccessSetupRestrictedGuid
)) {
682 mAccessInfo
.AccessSetup
= ACCESS_SETUP_RESTRICTED
;
683 } else if (CompareGuid ((EFI_GUID
*) AccessData
, &gEfiUserInfoAccessSetupAdminGuid
)) {
684 mAccessInfo
.AccessSetup
= ACCESS_SETUP_ADMIN
;
688 case EFI_USER_INFO_ACCESS_BOOT_ORDER
:
689 AccessData
= mUserInfo
.AccessPolicy
+ OffSet
+ sizeof (Control
);
690 CopyMem (&mAccessInfo
.AccessBootOrder
, AccessData
, sizeof (UINT32
));
693 case EFI_USER_INFO_ACCESS_FORBID_LOAD
:
694 if (mAccessInfo
.LoadForbid
!= NULL
) {
695 FreePool (mAccessInfo
.LoadForbid
);
698 mAccessInfo
.LoadForbid
= AllocateZeroPool (ValLen
);
699 if (mAccessInfo
.LoadForbid
!= NULL
) {
700 AccessData
= mUserInfo
.AccessPolicy
+ OffSet
+ sizeof (Control
);
701 CopyMem (mAccessInfo
.LoadForbid
, AccessData
, ValLen
);
702 mAccessInfo
.LoadForbidLen
= ValLen
;
706 case EFI_USER_INFO_ACCESS_PERMIT_LOAD
:
707 if (mAccessInfo
.LoadPermit
!= NULL
) {
708 FreePool (mAccessInfo
.LoadPermit
);
711 mAccessInfo
.LoadPermit
= AllocateZeroPool (ValLen
);
712 if (mAccessInfo
.LoadPermit
!= NULL
) {
713 AccessData
= mUserInfo
.AccessPolicy
+ OffSet
+ sizeof (Control
);
714 CopyMem (mAccessInfo
.LoadPermit
, AccessData
, ValLen
);
715 mAccessInfo
.LoadPermitLen
= ValLen
;
719 case EFI_USER_INFO_ACCESS_FORBID_CONNECT
:
720 if (mAccessInfo
.ConnectForbid
!= NULL
) {
721 FreePool (mAccessInfo
.ConnectForbid
);
724 mAccessInfo
.ConnectForbid
= AllocateZeroPool (ValLen
);
725 if (mAccessInfo
.ConnectForbid
!= NULL
) {
726 AccessData
= mUserInfo
.AccessPolicy
+ OffSet
+ sizeof (Control
);
727 CopyMem (mAccessInfo
.ConnectForbid
, AccessData
, ValLen
);
728 mAccessInfo
.ConnectForbidLen
= ValLen
;
732 case EFI_USER_INFO_ACCESS_PERMIT_CONNECT
:
733 if (mAccessInfo
.ConnectPermit
!= NULL
) {
734 FreePool (mAccessInfo
.ConnectPermit
);
737 mAccessInfo
.ConnectPermit
= AllocateZeroPool (ValLen
);
738 if (mAccessInfo
.ConnectPermit
!= NULL
) {
739 AccessData
= mUserInfo
.AccessPolicy
+ OffSet
+ sizeof (Control
);
740 CopyMem (mAccessInfo
.ConnectPermit
, AccessData
, ValLen
);
741 mAccessInfo
.ConnectPermitLen
= ValLen
;
746 OffSet
+= Control
.Size
;
752 Find the specified info in profile mModifyUser by the InfoType.
754 @param[in] InfoType The user information type to find.
755 @param[out] UserInfo Points to user information handle found.
757 @retval EFI_SUCCESS Find the user information successfully.
758 @retval Others Fail to find the user information.
764 OUT EFI_USER_INFO_HANDLE
*UserInfo
772 if (UserInfo
== NULL
) {
773 return EFI_INVALID_PARAMETER
;
778 // Allocate user information memory.
780 MemSize
= sizeof (EFI_USER_INFO
) + 63;
781 Info
= AllocateZeroPool (MemSize
);
783 return EFI_OUT_OF_RESOURCES
;
787 // Get each user information.
790 Status
= mUserManager
->GetNextInfo (mUserManager
, mModifyUser
, UserInfo
);
791 if (EFI_ERROR (Status
)) {
798 Status
= mUserManager
->GetInfo (
805 if (Status
== EFI_BUFFER_TOO_SMALL
) {
808 Info
= AllocateZeroPool (MemSize
);
810 return EFI_OUT_OF_RESOURCES
;
812 Status
= mUserManager
->GetInfo (
820 if (Status
== EFI_SUCCESS
) {
821 if (Info
->InfoType
== InfoType
) {
833 Display modify user access policy form.
835 In this form, access right, access setup and access boot order are dynamically
836 added. Load devicepath and connect devicepath are displayed too.
844 VOID
*StartOpCodeHandle
;
845 VOID
*EndOpCodeHandle
;
846 VOID
*OptionsOpCodeHandle
;
847 EFI_IFR_GUID_LABEL
*StartLabel
;
848 EFI_IFR_GUID_LABEL
*EndLabel
;
849 VOID
*DefaultOpCodeHandle
;
852 // Initialize the container for dynamic opcodes.
854 StartOpCodeHandle
= HiiAllocateOpCodeHandle ();
855 ASSERT (StartOpCodeHandle
!= NULL
);
857 EndOpCodeHandle
= HiiAllocateOpCodeHandle ();
858 ASSERT (EndOpCodeHandle
!= NULL
);
861 // Create Hii Extend Label OpCode.
863 StartLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
867 sizeof (EFI_IFR_GUID_LABEL
)
869 StartLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
870 StartLabel
->Number
= LABEL_AP_MOD_FUNC
;
872 EndLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
876 sizeof (EFI_IFR_GUID_LABEL
)
878 EndLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
879 EndLabel
->Number
= LABEL_END
;
883 // Resolve access policy information.
885 ResolveAccessPolicy ();
888 // Add access right one-of-code.
890 OptionsOpCodeHandle
= HiiAllocateOpCodeHandle ();
891 ASSERT (OptionsOpCodeHandle
!= NULL
);
892 DefaultOpCodeHandle
= HiiAllocateOpCodeHandle ();
893 ASSERT (DefaultOpCodeHandle
!= NULL
);
895 HiiCreateOneOfOptionOpCode (
897 STRING_TOKEN (STR_NORMAL
),
899 EFI_IFR_NUMERIC_SIZE_1
,
900 EFI_USER_INFO_ACCESS_ENROLL_SELF
903 HiiCreateOneOfOptionOpCode (
905 STRING_TOKEN (STR_ENROLL
),
907 EFI_IFR_NUMERIC_SIZE_1
,
908 EFI_USER_INFO_ACCESS_ENROLL_OTHERS
911 HiiCreateOneOfOptionOpCode (
913 STRING_TOKEN (STR_MANAGE
),
915 EFI_IFR_NUMERIC_SIZE_1
,
916 EFI_USER_INFO_ACCESS_MANAGE
919 HiiCreateDefaultOpCode (
921 EFI_HII_DEFAULT_CLASS_STANDARD
,
922 EFI_IFR_NUMERIC_SIZE_1
,
923 mAccessInfo
.AccessRight
926 HiiCreateOneOfOpCode (
927 StartOpCodeHandle
, // Container for dynamic created opcodes
928 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_AP
| KEY_MODIFY_RIGHT
, // Question ID
930 0, // Offset in Buffer Storage
931 STRING_TOKEN (STR_ACCESS_RIGHT
), // Question prompt text
932 STRING_TOKEN (STR_ACCESS_RIGHT_HELP
), // Question help text
933 EFI_IFR_FLAG_CALLBACK
, // Question flag
934 EFI_IFR_NUMERIC_SIZE_1
, // Data type of Question Value
935 OptionsOpCodeHandle
, // Option Opcode list
936 DefaultOpCodeHandle
// Default Opcode
938 HiiFreeOpCodeHandle (DefaultOpCodeHandle
);
939 HiiFreeOpCodeHandle (OptionsOpCodeHandle
);
943 // Add setup type one-of-code.
945 OptionsOpCodeHandle
= HiiAllocateOpCodeHandle ();
946 ASSERT (OptionsOpCodeHandle
!= NULL
);
947 DefaultOpCodeHandle
= HiiAllocateOpCodeHandle ();
948 ASSERT (DefaultOpCodeHandle
!= NULL
);
950 HiiCreateOneOfOptionOpCode (
952 STRING_TOKEN (STR_RESTRICTED
),
954 EFI_IFR_NUMERIC_SIZE_1
,
955 ACCESS_SETUP_RESTRICTED
958 HiiCreateOneOfOptionOpCode (
960 STRING_TOKEN (STR_NORMAL
),
962 EFI_IFR_NUMERIC_SIZE_1
,
966 HiiCreateOneOfOptionOpCode (
968 STRING_TOKEN (STR_ADMIN
),
970 EFI_IFR_NUMERIC_SIZE_1
,
974 HiiCreateDefaultOpCode (
976 EFI_HII_DEFAULT_CLASS_STANDARD
,
977 EFI_IFR_NUMERIC_SIZE_1
,
978 mAccessInfo
.AccessSetup
981 HiiCreateOneOfOpCode (
982 StartOpCodeHandle
, // Container for dynamic created opcodes
983 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_AP
| KEY_MODIFY_SETUP
, // Question ID
985 0, // Offset in Buffer Storage
986 STRING_TOKEN (STR_ACCESS_SETUP
), // Question prompt text
987 STRING_TOKEN (STR_ACCESS_SETUP_HELP
), // Question help text
988 EFI_IFR_FLAG_CALLBACK
, // Question flag
989 EFI_IFR_NUMERIC_SIZE_1
, // Data type of Question Value
990 OptionsOpCodeHandle
, // Option Opcode list
991 DefaultOpCodeHandle
// Default Opcode
993 HiiFreeOpCodeHandle (DefaultOpCodeHandle
);
994 HiiFreeOpCodeHandle (OptionsOpCodeHandle
);
997 // Add boot order one-of-code.
999 OptionsOpCodeHandle
= HiiAllocateOpCodeHandle ();
1000 ASSERT (OptionsOpCodeHandle
!= NULL
);
1001 DefaultOpCodeHandle
= HiiAllocateOpCodeHandle ();
1002 ASSERT (DefaultOpCodeHandle
!= NULL
);
1004 HiiCreateOneOfOptionOpCode (
1005 OptionsOpCodeHandle
,
1006 STRING_TOKEN (STR_INSERT
),
1008 EFI_IFR_NUMERIC_SIZE_4
,
1009 EFI_USER_INFO_ACCESS_BOOT_ORDER_INSERT
1012 HiiCreateOneOfOptionOpCode (
1013 OptionsOpCodeHandle
,
1014 STRING_TOKEN (STR_APPEND
),
1016 EFI_IFR_NUMERIC_SIZE_4
,
1017 EFI_USER_INFO_ACCESS_BOOT_ORDER_APPEND
1020 HiiCreateOneOfOptionOpCode (
1021 OptionsOpCodeHandle
,
1022 STRING_TOKEN (STR_REPLACE
),
1024 EFI_IFR_NUMERIC_SIZE_4
,
1025 EFI_USER_INFO_ACCESS_BOOT_ORDER_REPLACE
1028 HiiCreateOneOfOptionOpCode (
1029 OptionsOpCodeHandle
,
1030 STRING_TOKEN (STR_NODEFAULT
),
1032 EFI_IFR_NUMERIC_SIZE_4
,
1033 EFI_USER_INFO_ACCESS_BOOT_ORDER_NODEFAULT
1036 HiiCreateDefaultOpCode (
1037 DefaultOpCodeHandle
,
1038 EFI_HII_DEFAULT_CLASS_STANDARD
,
1039 EFI_IFR_NUMERIC_SIZE_4
,
1040 mAccessInfo
.AccessBootOrder
1043 HiiCreateOneOfOpCode (
1044 StartOpCodeHandle
, // Container for dynamic created opcodes
1045 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_AP
| KEY_MODIFY_BOOT
, // Question ID
1047 0, // Offset in Buffer Storage
1048 STRING_TOKEN (STR_BOOR_ORDER
), // Question prompt text
1049 STRING_TOKEN (STR_BOOT_ORDER_HELP
), // Question help text
1050 EFI_IFR_FLAG_CALLBACK
, // Question flag
1051 EFI_IFR_NUMERIC_SIZE_1
, // Data type of Question Value
1052 OptionsOpCodeHandle
, // Option Opcode list
1053 DefaultOpCodeHandle
// Default Opcode
1055 HiiFreeOpCodeHandle (DefaultOpCodeHandle
);
1056 HiiFreeOpCodeHandle (OptionsOpCodeHandle
);
1062 mCallbackInfo
->HiiHandle
, // HII handle
1063 &mUserProfileManagerGuid
, // Formset GUID
1064 FORMID_MODIFY_AP
, // Form ID
1065 StartOpCodeHandle
, // Label for where to insert opcodes
1066 EndOpCodeHandle
// Replace data
1069 HiiFreeOpCodeHandle (StartOpCodeHandle
);
1070 HiiFreeOpCodeHandle (EndOpCodeHandle
);
1075 Expand access policy memory size.
1077 @param[in] ValidLen The valid access policy length.
1078 @param[in] ExpandLen The length that is needed to expand.
1093 Len
= mUserInfo
.AccessPolicyLen
+ (ExpandLen
/ 64 + 1) * 64;
1094 Mem
= AllocateZeroPool (Len
);
1095 ASSERT (Mem
!= NULL
);
1097 if (mUserInfo
.AccessPolicy
!= NULL
) {
1098 CopyMem (Mem
, mUserInfo
.AccessPolicy
, ValidLen
);
1099 FreePool (mUserInfo
.AccessPolicy
);
1102 mUserInfo
.AccessPolicy
= Mem
;
1103 mUserInfo
.AccessPolicyLen
= Len
;
1108 Collect all the access policy data to mUserInfo.AccessPolicy,
1109 and save it to user profile.
1120 EFI_USER_INFO_ACCESS_CONTROL Control
;
1121 EFI_USER_INFO_HANDLE UserInfo
;
1122 EFI_USER_INFO
*Info
;
1124 if (mUserInfo
.AccessPolicy
!= NULL
) {
1125 FreePool (mUserInfo
.AccessPolicy
);
1127 mUserInfo
.AccessPolicy
= NULL
;
1128 mUserInfo
.AccessPolicyLen
= 0;
1129 mUserInfo
.AccessPolicyModified
= TRUE
;
1133 // Save access right.
1135 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
);
1136 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1137 ExpandMemory (OffSet
, Size
);
1140 Control
.Type
= mAccessInfo
.AccessRight
;
1141 Control
.Size
= (UINT32
) Size
;
1142 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1143 OffSet
+= sizeof (Control
);
1146 // Save access setup.
1148 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
) + sizeof (EFI_GUID
);
1149 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1150 ExpandMemory (OffSet
, Size
);
1153 Control
.Type
= EFI_USER_INFO_ACCESS_SETUP
;
1154 Control
.Size
= (UINT32
) Size
;
1155 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1156 OffSet
+= sizeof (Control
);
1158 if (mAccessInfo
.AccessSetup
== ACCESS_SETUP_NORMAL
) {
1159 CopyGuid ((EFI_GUID
*) (mUserInfo
.AccessPolicy
+ OffSet
), &gEfiUserInfoAccessSetupNormalGuid
);
1160 } else if (mAccessInfo
.AccessSetup
== ACCESS_SETUP_RESTRICTED
) {
1161 CopyGuid ((EFI_GUID
*) (mUserInfo
.AccessPolicy
+ OffSet
), &gEfiUserInfoAccessSetupRestrictedGuid
);
1162 } else if (mAccessInfo
.AccessSetup
== ACCESS_SETUP_ADMIN
) {
1163 CopyGuid ((EFI_GUID
*) (mUserInfo
.AccessPolicy
+ OffSet
), &gEfiUserInfoAccessSetupAdminGuid
);
1165 OffSet
+= sizeof (EFI_GUID
);
1168 // Save access of boot order.
1170 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
) + sizeof (UINT32
);
1171 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1172 ExpandMemory (OffSet
, Size
);
1175 Control
.Type
= EFI_USER_INFO_ACCESS_BOOT_ORDER
;
1176 Control
.Size
= (UINT32
) Size
;
1177 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1178 OffSet
+= sizeof (Control
);
1180 CopyMem ((UINT8
*) (mUserInfo
.AccessPolicy
+ OffSet
), &mAccessInfo
.AccessBootOrder
, sizeof (UINT32
));
1181 OffSet
+= sizeof (UINT32
);
1184 // Save permit load.
1186 if (mAccessInfo
.LoadPermitLen
> 0) {
1187 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
) + mAccessInfo
.LoadPermitLen
;
1188 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1189 ExpandMemory (OffSet
, Size
);
1192 Control
.Type
= EFI_USER_INFO_ACCESS_PERMIT_LOAD
;
1193 Control
.Size
= (UINT32
) Size
;
1194 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1195 OffSet
+= sizeof (Control
);
1197 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, mAccessInfo
.LoadPermit
, mAccessInfo
.LoadPermitLen
);
1198 OffSet
+= mAccessInfo
.LoadPermitLen
;
1202 // Save forbid load.
1204 if (mAccessInfo
.LoadForbidLen
> 0) {
1205 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
) + mAccessInfo
.LoadForbidLen
;
1206 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1207 ExpandMemory (OffSet
, Size
);
1210 Control
.Type
= EFI_USER_INFO_ACCESS_FORBID_LOAD
;
1211 Control
.Size
= (UINT32
) Size
;
1212 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1213 OffSet
+= sizeof (Control
);
1215 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, mAccessInfo
.LoadForbid
, mAccessInfo
.LoadForbidLen
);
1216 OffSet
+= mAccessInfo
.LoadForbidLen
;
1220 // Save permit connect.
1222 if (mAccessInfo
.ConnectPermitLen
> 0) {
1223 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
) + mAccessInfo
.ConnectPermitLen
;
1224 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1225 ExpandMemory (OffSet
, Size
);
1228 Control
.Type
= EFI_USER_INFO_ACCESS_PERMIT_CONNECT
;
1229 Control
.Size
= (UINT32
) Size
;
1230 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1231 OffSet
+= sizeof (Control
);
1233 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, mAccessInfo
.ConnectPermit
, mAccessInfo
.ConnectPermitLen
);
1234 OffSet
+= mAccessInfo
.ConnectPermitLen
;
1238 // Save forbid connect.
1240 if (mAccessInfo
.ConnectForbidLen
> 0) {
1241 Size
= sizeof (EFI_USER_INFO_ACCESS_CONTROL
) + mAccessInfo
.ConnectForbidLen
;
1242 if (mUserInfo
.AccessPolicyLen
- OffSet
< Size
) {
1243 ExpandMemory (OffSet
, Size
);
1246 Control
.Type
= EFI_USER_INFO_ACCESS_FORBID_CONNECT
;
1247 Control
.Size
= (UINT32
) Size
;
1248 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, &Control
, sizeof (Control
));
1249 OffSet
+= sizeof (Control
);
1251 CopyMem (mUserInfo
.AccessPolicy
+ OffSet
, mAccessInfo
.ConnectForbid
, mAccessInfo
.ConnectForbidLen
);
1252 OffSet
+= mAccessInfo
.ConnectForbidLen
;
1255 mUserInfo
.AccessPolicyLen
= OffSet
;
1258 // Save access policy.
1260 if (mUserInfo
.AccessPolicyModified
&& (mUserInfo
.AccessPolicyLen
> 0)) {
1261 Info
= AllocateZeroPool (sizeof (EFI_USER_INFO
) + mUserInfo
.AccessPolicyLen
);
1266 Status
= FindInfoByType (EFI_USER_INFO_ACCESS_POLICY_RECORD
, &UserInfo
);
1267 if (!EFI_ERROR (Status
)) {
1268 Info
->InfoType
= EFI_USER_INFO_ACCESS_POLICY_RECORD
;
1269 Info
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
1270 EFI_USER_INFO_PUBLIC
|
1271 EFI_USER_INFO_EXCLUSIVE
;
1272 Info
->InfoSize
= (UINT32
) (sizeof (EFI_USER_INFO
) + mUserInfo
.AccessPolicyLen
);
1273 CopyMem ((UINT8
*) (Info
+ 1), mUserInfo
.AccessPolicy
, mUserInfo
.AccessPolicyLen
);
1274 Status
= mUserManager
->SetInfo (
1281 mUserInfo
.AccessPolicyModified
= FALSE
;
1286 if (mAccessInfo
.ConnectForbid
!= NULL
) {
1287 FreePool (mAccessInfo
.ConnectForbid
);
1288 mAccessInfo
.ConnectForbid
= NULL
;
1291 if (mAccessInfo
.ConnectPermit
!= NULL
) {
1292 FreePool (mAccessInfo
.ConnectPermit
);
1293 mAccessInfo
.ConnectPermit
= NULL
;
1296 if (mAccessInfo
.LoadForbid
!= NULL
) {
1297 FreePool (mAccessInfo
.LoadForbid
);
1298 mAccessInfo
.LoadForbid
= NULL
;
1301 if (mAccessInfo
.LoadPermit
!= NULL
) {
1302 FreePool (mAccessInfo
.LoadPermit
);
1303 mAccessInfo
.LoadPermit
= NULL
;
1309 Get the username from user input, and update username string in the Hii
1319 CHAR16 UserName
[USER_NAME_LENGTH
];
1322 EFI_USER_INFO_HANDLE UserInfo
;
1323 EFI_USER_INFO
*Info
;
1324 EFI_USER_PROFILE_HANDLE TempUser
;
1327 // Get the new user name.
1329 Len
= sizeof (UserName
);
1330 Status
= GetUserNameInput (&Len
, UserName
);
1331 if (EFI_ERROR (Status
)) {
1332 if (Status
!= EFI_ABORTED
) {
1334 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1336 L
"Failed To Get User Name.",
1338 L
"Please Press Any Key to Continue ...",
1346 // Check whether the username had been used or not.
1348 Info
= AllocateZeroPool (sizeof (EFI_USER_INFO
) + Len
);
1353 Info
->InfoType
= EFI_USER_INFO_NAME_RECORD
;
1354 Info
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
1355 EFI_USER_INFO_PUBLIC
|
1356 EFI_USER_INFO_EXCLUSIVE
;
1357 Info
->InfoSize
= (UINT32
) (sizeof (EFI_USER_INFO
) + Len
);
1358 CopyMem ((UINT8
*) (Info
+ 1), UserName
, Len
);
1361 Status
= mUserManager
->Find (
1368 if (!EFI_ERROR (Status
)) {
1370 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1372 L
"The User Name Had Been Used.",
1374 L
"Please Use Other User Name",
1382 // Update username display in the form.
1384 CopyMem (mUserInfo
.UserName
, UserName
, Len
);
1386 mCallbackInfo
->HiiHandle
,
1387 STRING_TOKEN (STR_USER_NAME_VAL
),
1393 // Save the user name.
1395 Status
= FindInfoByType (EFI_USER_INFO_NAME_RECORD
, &UserInfo
);
1396 if (!EFI_ERROR (Status
)) {
1397 mUserManager
->SetInfo (
1410 Display the form of the modifying user identity policy.
1414 ModifyIdentityPolicy (
1420 EFI_STRING_ID ProvID
;
1421 EFI_HII_HANDLE HiiHandle
;
1422 VOID
*OptionsOpCodeHandle
;
1423 VOID
*StartOpCodeHandle
;
1424 VOID
*EndOpCodeHandle
;
1425 EFI_IFR_GUID_LABEL
*StartLabel
;
1426 EFI_IFR_GUID_LABEL
*EndLabel
;
1429 // Initialize the container for dynamic opcodes.
1431 StartOpCodeHandle
= HiiAllocateOpCodeHandle ();
1432 ASSERT (StartOpCodeHandle
!= NULL
);
1434 EndOpCodeHandle
= HiiAllocateOpCodeHandle ();
1435 ASSERT (EndOpCodeHandle
!= NULL
);
1438 // Create Hii Extend Label OpCode.
1440 StartLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
1444 sizeof (EFI_IFR_GUID_LABEL
)
1446 StartLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1447 StartLabel
->Number
= LABEL_IP_MOD_FUNC
;
1449 EndLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
1453 sizeof (EFI_IFR_GUID_LABEL
)
1455 EndLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1456 EndLabel
->Number
= LABEL_END
;
1459 // Add credential providers
1461 if (mProviderInfo
->Count
> 0) {
1462 OptionsOpCodeHandle
= HiiAllocateOpCodeHandle ();
1463 ASSERT (OptionsOpCodeHandle
!= NULL
);
1466 // Add credential provider Option OpCode.
1468 for (Index
= 0; Index
< mProviderInfo
->Count
; Index
++) {
1469 mProviderInfo
->Provider
[Index
]->Title (
1470 mProviderInfo
->Provider
[Index
],
1474 ProvStr
= HiiGetString (HiiHandle
, ProvID
, NULL
);
1475 ProvID
= HiiSetString (mCallbackInfo
->HiiHandle
, 0, ProvStr
, NULL
);
1481 HiiCreateOneOfOptionOpCode (
1482 OptionsOpCodeHandle
,
1485 EFI_IFR_NUMERIC_SIZE_1
,
1490 HiiCreateOneOfOpCode (
1491 StartOpCodeHandle
, // Container for dynamic created opcodes
1492 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_IP
| KEY_MODIFY_PROV
, // Question ID
1494 0, // Offset in Buffer Storage
1495 STRING_TOKEN (STR_PROVIDER
), // Question prompt text
1496 STRING_TOKEN (STR_PROVIDER_HELP
), // Question help text
1497 EFI_IFR_FLAG_CALLBACK
, // Question flag
1498 EFI_IFR_NUMERIC_SIZE_1
, // Data type of Question Value
1499 OptionsOpCodeHandle
, // Option Opcode list
1500 NULL
// Default Opcode is NULl
1503 HiiFreeOpCodeHandle (OptionsOpCodeHandle
);
1507 // Add logical connector Option OpCode.
1509 OptionsOpCodeHandle
= HiiAllocateOpCodeHandle ();
1510 ASSERT (OptionsOpCodeHandle
!= NULL
);
1512 HiiCreateOneOfOptionOpCode (
1513 OptionsOpCodeHandle
,
1514 STRING_TOKEN (STR_AND_CON
),
1516 EFI_IFR_NUMERIC_SIZE_1
,
1520 HiiCreateOneOfOptionOpCode (
1521 OptionsOpCodeHandle
,
1522 STRING_TOKEN (STR_OR_CON
),
1524 EFI_IFR_NUMERIC_SIZE_1
,
1528 HiiCreateOneOfOpCode (
1529 StartOpCodeHandle
, // Container for dynamic created opcodes
1530 KEY_MODIFY_USER
| KEY_SELECT_USER
| KEY_MODIFY_IP
| KEY_MODIFY_CONN
, // Question ID
1532 0, // Offset in Buffer Storage
1533 STRING_TOKEN (STR_CONNECTOR
), // Question prompt text
1534 STRING_TOKEN (STR_CONNECTOR_HELP
), // Question help text
1535 EFI_IFR_FLAG_CALLBACK
, // Question flag
1536 EFI_IFR_NUMERIC_SIZE_1
, // Data type of Question Value
1537 OptionsOpCodeHandle
, // Option Opcode list
1538 NULL
// Default Opcode is NULl
1541 HiiFreeOpCodeHandle (OptionsOpCodeHandle
);
1544 // Update identity policy in the form.
1546 ResolveIdentityPolicy (
1547 mUserInfo
.IdentityPolicy
,
1548 mUserInfo
.IdentityPolicyLen
,
1549 STRING_TOKEN (STR_IDENTIFY_POLICY_VALUE
)
1552 if (mUserInfo
.NewIdentityPolicy
!= NULL
) {
1553 FreePool (mUserInfo
.NewIdentityPolicy
);
1554 mUserInfo
.NewIdentityPolicy
= NULL
;
1555 mUserInfo
.NewIdentityPolicyLen
= 0;
1556 mUserInfo
.NewIdentityPolicyModified
= FALSE
;
1558 mProviderChoice
= 0;
1559 mConncetLogical
= 0;
1562 mCallbackInfo
->HiiHandle
, // HII handle
1563 &mUserProfileManagerGuid
, // Formset GUID
1564 FORMID_MODIFY_IP
, // Form ID
1565 StartOpCodeHandle
, // Label for where to insert opcodes
1566 EndOpCodeHandle
// Replace data
1569 HiiFreeOpCodeHandle (StartOpCodeHandle
);
1570 HiiFreeOpCodeHandle (EndOpCodeHandle
);
1575 Save the identity policy and update UI with it.
1577 This funciton will verify the new identity policy, in current implementation,
1578 the identity policy can be: T, P & P & P & ..., P | P | P | ...
1579 Here, "T" means "True", "P" means "Credential Provider", "&" means "and", "|" means "or".
1580 Other identity policies are not supported.
1584 SaveIdentityPolicy (
1589 EFI_USER_INFO_IDENTITY_POLICY
*Identity
;
1590 EFI_USER_INFO_HANDLE UserInfo
;
1591 EFI_USER_INFO
*Info
;
1597 if (!mUserInfo
.NewIdentityPolicyModified
|| (mUserInfo
.NewIdentityPolicyLen
== 0)) {
1602 // Check policy expression.
1604 OpCode
= EFI_USER_INFO_IDENTITY_FALSE
;
1606 while (Offset
< mUserInfo
.NewIdentityPolicyLen
) {
1608 // Check access policy according to type
1610 Identity
= (EFI_USER_INFO_IDENTITY_POLICY
*) (mUserInfo
.NewIdentityPolicy
+ Offset
);
1611 switch (Identity
->Type
) {
1613 case EFI_USER_INFO_IDENTITY_TRUE
:
1616 case EFI_USER_INFO_IDENTITY_OR
:
1617 if (OpCode
== EFI_USER_INFO_IDENTITY_AND
) {
1619 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1621 L
"Invalid Identity Policy, Mixed Connector Unsupport!",
1623 L
"Press Any Key to Continue ...",
1629 OpCode
= EFI_USER_INFO_IDENTITY_OR
;
1632 case EFI_USER_INFO_IDENTITY_AND
:
1633 if (OpCode
== EFI_USER_INFO_IDENTITY_OR
) {
1635 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1637 L
"Invalid Identity Policy, Mixed Connector Unsupport!",
1639 L
"Press Any Key to Continue ...",
1645 OpCode
= EFI_USER_INFO_IDENTITY_AND
;
1648 case EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER
:
1653 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1655 L
"Unsupport parameter",
1657 L
"Press Any Key to Continue ...",
1662 Offset
+= Identity
->Length
;
1666 // Save identity policy.
1668 Info
= AllocateZeroPool (
1669 sizeof (EFI_USER_INFO
) +
1670 mUserInfo
.NewIdentityPolicyLen
1676 Status
= FindInfoByType (EFI_USER_INFO_IDENTITY_POLICY_RECORD
, &UserInfo
);
1677 if (EFI_ERROR (Status
)) {
1682 Info
->InfoType
= EFI_USER_INFO_IDENTITY_POLICY_RECORD
;
1683 Info
->InfoAttribs
= EFI_USER_INFO_STORAGE_PLATFORM_NV
|
1684 EFI_USER_INFO_PRIVATE
|
1685 EFI_USER_INFO_EXCLUSIVE
;
1686 Info
->InfoSize
= (UINT32
) (sizeof (EFI_USER_INFO
) + mUserInfo
.NewIdentityPolicyLen
);
1687 CopyMem ((UINT8
*) (Info
+ 1), mUserInfo
.NewIdentityPolicy
, mUserInfo
.NewIdentityPolicyLen
);
1688 Status
= mUserManager
->SetInfo (
1696 if (EFI_ERROR (Status
)) {
1698 // Get the user information again, it may be changed during saving it.
1701 Status
= mUserManager
->GetInfo (
1708 if (Status
== EFI_BUFFER_TOO_SMALL
) {
1709 Info
= AllocateZeroPool (InfoSize
);
1710 ASSERT (Info
!= NULL
);
1711 Status
= mUserManager
->GetInfo (
1719 ASSERT_EFI_ERROR (Status
);
1722 // Save current identification policy to mUserInfo.IdentityPolicy.
1724 ASSERT (Info
!= NULL
);
1725 if (mUserInfo
.IdentityPolicy
!= NULL
) {
1726 FreePool (mUserInfo
.IdentityPolicy
);
1729 mUserInfo
.IdentityPolicyLen
= Info
->InfoSize
- sizeof (EFI_USER_INFO
);
1730 mUserInfo
.IdentityPolicy
= AllocateCopyPool (mUserInfo
.IdentityPolicyLen
, Info
+ 1);
1731 ASSERT (mUserInfo
.IdentityPolicy
!= NULL
);
1737 FreePool (mUserInfo
.NewIdentityPolicy
);
1740 // Update the mUserInfo.IdentityPolicy by mUserInfo.NewIdentityPolicy
1742 if (mUserInfo
.IdentityPolicy
!= NULL
) {
1743 FreePool (mUserInfo
.IdentityPolicy
);
1745 mUserInfo
.IdentityPolicy
= mUserInfo
.NewIdentityPolicy
;
1746 mUserInfo
.IdentityPolicyLen
= mUserInfo
.NewIdentityPolicyLen
;
1749 mUserInfo
.NewIdentityPolicy
= NULL
;
1750 mUserInfo
.NewIdentityPolicyLen
= 0;
1751 mUserInfo
.NewIdentityPolicyModified
= FALSE
;
1754 // Update identity policy choice.
1756 ResolveIdentityPolicy (
1757 mUserInfo
.IdentityPolicy
,
1758 mUserInfo
.IdentityPolicyLen
,
1759 STRING_TOKEN (STR_IDENTIFY_POLICY_VAL
)
1765 Verify the new identity policy in the current implementation. The same credential
1766 provider can't appear twice in one identity policy.
1768 @param[in] NewGuid Points to the credential provider guid.
1770 @retval TRUE The NewGuid was found in the identity policy.
1771 @retval FALSE The NewGuid was not found.
1775 CheckIdentityPolicy (
1776 IN EFI_GUID
*NewGuid
1780 EFI_USER_INFO_IDENTITY_POLICY
*Identity
;
1784 while (Offset
< mUserInfo
.NewIdentityPolicyLen
) {
1786 // Check access policy according to type.
1788 Identity
= (EFI_USER_INFO_IDENTITY_POLICY
*) (mUserInfo
.NewIdentityPolicy
+ Offset
);
1789 switch (Identity
->Type
) {
1791 case EFI_USER_INFO_IDENTITY_TRUE
:
1792 case EFI_USER_INFO_IDENTITY_OR
:
1793 case EFI_USER_INFO_IDENTITY_AND
:
1796 case EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER
:
1797 if (CompareGuid (NewGuid
, (EFI_GUID
*) (Identity
+ 1))) {
1799 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1801 L
"This Credential Provider Are Already Used!",
1803 L
"Press Any Key to Continue ...",
1812 EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
,
1814 L
"Unsupport parameter",
1816 L
"Press Any Key to Continue ...",
1822 Offset
+= Identity
->Length
;
1829 Update the mUserInfo.NewIdentityPolicy, and UI when 'add option' is pressed.
1833 AddIdentityPolicyItem (
1838 EFI_USER_INFO_IDENTITY_POLICY
*Policy
;
1840 if (mProviderInfo
->Count
== 0) {
1844 if (!mUserInfo
.NewIdentityPolicyModified
&& (mUserInfo
.NewIdentityPolicyLen
> 0)) {
1845 FreePool (mUserInfo
.NewIdentityPolicy
);
1846 mUserInfo
.NewIdentityPolicy
= NULL
;
1847 mUserInfo
.NewIdentityPolicyLen
= 0;
1850 // Expand the identity policy memory for the newly added policy info.
1852 if (mUserInfo
.NewIdentityPolicyLen
> 0) {
1854 // The new policy is not empty, expand space for connetor and provider.
1856 if (!CheckIdentityPolicy (&mProviderInfo
->Provider
[mProviderChoice
]->Identifier
)) {
1859 NewInfo
= AllocateZeroPool (
1860 mUserInfo
.NewIdentityPolicyLen
+
1861 sizeof (EFI_USER_INFO_IDENTITY_POLICY
) * 2 +
1866 // The new policy is empty, only expand space for provider.
1868 NewInfo
= AllocateZeroPool (
1869 mUserInfo
.NewIdentityPolicyLen
+
1870 sizeof (EFI_USER_INFO_IDENTITY_POLICY
) +
1875 if (NewInfo
== NULL
) {
1879 if (mUserInfo
.NewIdentityPolicyLen
> 0) {
1880 CopyMem (NewInfo
, mUserInfo
.NewIdentityPolicy
, mUserInfo
.NewIdentityPolicyLen
);
1881 FreePool (mUserInfo
.NewIdentityPolicy
);
1883 mUserInfo
.NewIdentityPolicy
= NewInfo
;
1886 // Save logical connector.
1888 if (mUserInfo
.NewIdentityPolicyLen
> 0) {
1889 Policy
= (EFI_USER_INFO_IDENTITY_POLICY
*) (mUserInfo
.NewIdentityPolicy
+
1890 mUserInfo
.NewIdentityPolicyLen
);
1891 if (mConncetLogical
== 0) {
1892 Policy
->Type
= EFI_USER_INFO_IDENTITY_AND
;
1894 Policy
->Type
= EFI_USER_INFO_IDENTITY_OR
;
1897 Policy
->Length
= sizeof (EFI_USER_INFO_IDENTITY_POLICY
);
1898 mUserInfo
.NewIdentityPolicyLen
+= Policy
->Length
;
1902 // Save credential provider.
1904 Policy
= (EFI_USER_INFO_IDENTITY_POLICY
*) (mUserInfo
.NewIdentityPolicy
+
1905 mUserInfo
.NewIdentityPolicyLen
);
1906 Policy
->Length
= sizeof (EFI_USER_INFO_IDENTITY_POLICY
) + sizeof (EFI_GUID
);
1907 Policy
->Type
= EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER
;
1908 CopyGuid ((EFI_GUID
*) (Policy
+ 1), &mProviderInfo
->Provider
[mProviderChoice
]->Identifier
);
1909 mUserInfo
.NewIdentityPolicyLen
+= Policy
->Length
;
1912 // Update identity policy choice.
1914 mUserInfo
.NewIdentityPolicyModified
= TRUE
;
1915 ResolveIdentityPolicy (
1916 mUserInfo
.NewIdentityPolicy
,
1917 mUserInfo
.NewIdentityPolicyLen
,
1918 STRING_TOKEN (STR_IDENTIFY_POLICY_VALUE
)
1924 Create an action OpCode with QuestionID and DevicePath on a given OpCodeHandle.
1926 @param[in] QuestionID The question ID.
1927 @param[in] DevicePath Points to device path.
1928 @param[in] OpCodeHandle Points to container for dynamic created opcodes.
1933 IN UINTN QuestionID
,
1934 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
1935 IN VOID
*OpCodeHandle
1939 EFI_DEVICE_PATH_PROTOCOL
*Next
;
1940 EFI_STRING_ID NameID
;
1941 EFI_STRING DriverName
;
1942 EFI_DEVICE_PATH_TO_TEXT_PROTOCOL
*DevicePathText
;
1945 // Locate device path to text protocol.
1947 Status
= gBS
->LocateProtocol (
1948 &gEfiDevicePathToTextProtocolGuid
,
1950 (VOID
**) &DevicePathText
1952 if (EFI_ERROR (Status
)) {
1957 // Get driver file name node.
1960 while (!IsDevicePathEnd (Next
)) {
1962 Next
= NextDevicePathNode (Next
);
1966 // Display the device path in form.
1968 DriverName
= DevicePathText
->ConvertDevicePathToText (DevicePath
, FALSE
, FALSE
);
1969 NameID
= HiiSetString (mCallbackInfo
->HiiHandle
, 0, DriverName
, NULL
);
1970 FreePool (DriverName
);
1975 HiiCreateActionOpCode (
1976 OpCodeHandle
, // Container for dynamic created opcodes
1977 (UINT16
) QuestionID
, // Question ID
1978 NameID
, // Prompt text
1979 STRING_TOKEN (STR_NULL_STRING
), // Help text
1980 EFI_IFR_FLAG_CALLBACK
, // Question flag
1981 0 // Action String ID
1987 Check whether the DevicePath is in the device path forbid list
1988 (mAccessInfo.LoadForbid).
1990 @param[in] DevicePath Points to device path.
1992 @retval TRUE The DevicePath is in the device path forbid list.
1993 @retval FALSE The DevicePath is not in the device path forbid list.
1998 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
2004 EFI_DEVICE_PATH_PROTOCOL
*Dp
;
2007 Size
= GetDevicePathSize (DevicePath
);
2009 // Check each device path.
2011 while (OffSet
< mAccessInfo
.LoadForbidLen
) {
2012 Dp
= (EFI_DEVICE_PATH_PROTOCOL
*) (mAccessInfo
.LoadForbid
+ OffSet
);
2013 DPSize
= GetDevicePathSize (Dp
);
2015 // Compare device path.
2017 if ((DPSize
== Size
) && (CompareMem (DevicePath
, Dp
, Size
) == 0)) {
2027 Display the permit load device path in the loadable device path list.
2043 VOID
*StartOpCodeHandle
;
2044 VOID
*EndOpCodeHandle
;
2045 EFI_IFR_GUID_LABEL
*StartLabel
;
2046 EFI_IFR_GUID_LABEL
*EndLabel
;
2052 Status
= gRT
->GetVariable (
2054 &gEfiGlobalVariableGuid
,
2059 if (Status
!= EFI_BUFFER_TOO_SMALL
) {
2063 Order
= AllocateZeroPool (OrderSize
);
2064 if (Order
== NULL
) {
2068 Status
= gRT
->GetVariable (
2070 &gEfiGlobalVariableGuid
,
2075 if (EFI_ERROR (Status
)) {
2080 // Initialize the container for dynamic opcodes.
2082 StartOpCodeHandle
= HiiAllocateOpCodeHandle ();
2083 ASSERT (StartOpCodeHandle
!= NULL
);
2085 EndOpCodeHandle
= HiiAllocateOpCodeHandle ();
2086 ASSERT (EndOpCodeHandle
!= NULL
);
2089 // Create Hii Extend Label OpCode.
2091 StartLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
2095 sizeof (EFI_IFR_GUID_LABEL
)
2097 StartLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
2098 StartLabel
->Number
= LABEL_PERMIT_LOAD_FUNC
;
2100 EndLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
2104 sizeof (EFI_IFR_GUID_LABEL
)
2106 EndLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
2107 EndLabel
->Number
= LABEL_END
;
2110 // Add each driver option.
2113 ListCount
= OrderSize
/ sizeof (UINT16
);
2114 for (Index
= 0; Index
< ListCount
; Index
++) {
2116 // Get driver device path.
2118 UnicodeSPrint (VarName
, sizeof (VarName
), L
"Driver%04x", Order
[Index
]);
2119 Var
= GetEfiGlobalVariable (VarName
);
2125 // Check whether the driver is already forbidden.
2132 VarPtr
+= sizeof (UINT32
);
2135 // Skip device path lenth.
2137 VarPtr
+= sizeof (UINT16
);
2140 // Skip descript string.
2142 VarPtr
+= StrSize ((UINT16
*) VarPtr
);
2144 if (IsLoadForbidden ((EFI_DEVICE_PATH_PROTOCOL
*) VarPtr
)) {
2151 KEY_MODIFY_USER
| KEY_MODIFY_AP_DP
| KEY_LOAD_PERMIT_MODIFY
| Order
[Index
],
2152 (EFI_DEVICE_PATH_PROTOCOL
*) VarPtr
,
2160 mCallbackInfo
->HiiHandle
, // HII handle
2161 &mUserProfileManagerGuid
, // Formset GUID
2162 FORMID_PERMIT_LOAD_DP
, // Form ID
2163 StartOpCodeHandle
, // Label for where to insert opcodes
2164 EndOpCodeHandle
// Replace data
2167 HiiFreeOpCodeHandle (StartOpCodeHandle
);
2168 HiiFreeOpCodeHandle (EndOpCodeHandle
);
2171 // Clear Environment.
2181 Display the forbid load device path list (mAccessInfo.LoadForbid).
2192 EFI_DEVICE_PATH_PROTOCOL
*Dp
;
2193 VOID
*StartOpCodeHandle
;
2194 VOID
*EndOpCodeHandle
;
2195 EFI_IFR_GUID_LABEL
*StartLabel
;
2196 EFI_IFR_GUID_LABEL
*EndLabel
;
2199 // Initialize the container for dynamic opcodes.
2201 StartOpCodeHandle
= HiiAllocateOpCodeHandle ();
2202 ASSERT (StartOpCodeHandle
!= NULL
);
2204 EndOpCodeHandle
= HiiAllocateOpCodeHandle ();
2205 ASSERT (EndOpCodeHandle
!= NULL
);
2208 // Create Hii Extend Label OpCode.
2210 StartLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
2214 sizeof (EFI_IFR_GUID_LABEL
)
2216 StartLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
2217 StartLabel
->Number
= LABLE_FORBID_LOAD_FUNC
;
2219 EndLabel
= (EFI_IFR_GUID_LABEL
*) HiiCreateGuidOpCode (
2223 sizeof (EFI_IFR_GUID_LABEL
)
2225 EndLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
2226 EndLabel
->Number
= LABEL_END
;
2229 // Add each forbid load drivers.
2233 while (Offset
< mAccessInfo
.LoadForbidLen
) {
2234 Dp
= (EFI_DEVICE_PATH_PROTOCOL
*) (mAccessInfo
.LoadForbid
+ Offset
);
2235 DPSize
= GetDevicePathSize (Dp
);
2237 KEY_MODIFY_USER
| KEY_MODIFY_AP_DP
| KEY_LOAD_FORBID_MODIFY
| Index
,
2246 mCallbackInfo
->HiiHandle
, // HII handle
2247 &mUserProfileManagerGuid
, // Formset GUID
2248 FORMID_FORBID_LOAD_DP
, // Form ID
2249 StartOpCodeHandle
, // Label for where to insert opcodes
2250 EndOpCodeHandle
// Replace data
2253 HiiFreeOpCodeHandle (StartOpCodeHandle
);
2254 HiiFreeOpCodeHandle (EndOpCodeHandle
);
2259 Display the permit connect device path.
2263 DisplayConnectPermit (
2269 // As no architect protocol/interface to be called in ConnectController()
2270 // to verify the device path, just add a place holder for permitted connect
2277 Display the forbid connect device path list.
2281 DisplayConnectForbid (
2287 // As no architect protocol/interface to be called in ConnectController()
2288 // to verify the device path, just add a place holder for forbidden connect
2295 Delete the specified device path by DriverIndex from the forbid device path
2296 list (mAccessInfo.LoadForbid).
2298 @param[in] DriverIndex The index of driver in forbidden device path list.
2302 DeleteFromForbidLoad (
2303 IN UINT16 DriverIndex
2309 EFI_DEVICE_PATH_PROTOCOL
*Dp
;
2313 // Find the specified device path.
2315 while ((OffSet
< mAccessInfo
.LoadForbidLen
) && (DriverIndex
> 0)) {
2316 Dp
= (EFI_DEVICE_PATH_PROTOCOL
*) (mAccessInfo
.LoadForbid
+ OffSet
);
2317 DPSize
= GetDevicePathSize (Dp
);
2323 // Specified device path found.
2325 if (DriverIndex
== 0) {
2326 Dp
= (EFI_DEVICE_PATH_PROTOCOL
*) (mAccessInfo
.LoadForbid
+ OffSet
);
2327 DPSize
= GetDevicePathSize (Dp
);
2328 OffLen
= mAccessInfo
.LoadForbidLen
- OffSet
- DPSize
;
2331 mAccessInfo
.LoadForbid
+ OffSet
,
2332 mAccessInfo
.LoadForbid
+ OffSet
+ DPSize
,
2336 mAccessInfo
.LoadForbidLen
-= DPSize
;
2342 Add the specified device path by DriverIndex to the forbid device path
2343 list (mAccessInfo.LoadForbid).
2345 @param[in] DriverIndex The index of driver saved in driver options.
2350 IN UINT16 DriverIndex
2353 UINTN DevicePathLen
;
2361 // Get loadable driver device path.
2363 UnicodeSPrint (VarName
, sizeof (VarName
), L
"Driver%04x", DriverIndex
);
2364 Var
= GetEfiGlobalVariable (VarName
);
2370 // Save forbid load driver.
2377 VarPtr
+= sizeof (UINT32
);
2379 DevicePathLen
= *(UINT16
*) VarPtr
;
2381 // Skip device path length.
2383 VarPtr
+= sizeof (UINT16
);
2386 // Skip description string.
2388 VarPtr
+= StrSize ((UINT16
*) VarPtr
);
2390 NewLen
= mAccessInfo
.LoadForbidLen
+ DevicePathLen
;
2391 NewFL
= AllocateZeroPool (NewLen
);
2392 if (NewFL
== NULL
) {
2397 if (mAccessInfo
.LoadForbidLen
> 0) {
2398 CopyMem (NewFL
, mAccessInfo
.LoadForbid
, mAccessInfo
.LoadForbidLen
);
2399 FreePool (mAccessInfo
.LoadForbid
);
2402 CopyMem (NewFL
+ mAccessInfo
.LoadForbidLen
, VarPtr
, DevicePathLen
);
2403 mAccessInfo
.LoadForbidLen
= NewLen
;
2404 mAccessInfo
.LoadForbid
= NewFL
;
2410 Get current user's access right.
2412 @param[out] AccessRight Points to the buffer used for user's access right.
2414 @retval EFI_SUCCESS Get current user access right successfully.
2415 @retval others Fail to get current user access right.
2420 OUT UINT32
*AccessRight
2424 EFI_USER_INFO_HANDLE UserInfo
;
2425 EFI_USER_INFO
*Info
;
2428 EFI_USER_INFO_ACCESS_CONTROL Access
;
2429 EFI_USER_PROFILE_HANDLE CurrentUser
;
2434 // Allocate user information memory.
2436 MemSize
= sizeof (EFI_USER_INFO
) + 63;
2437 Info
= AllocateZeroPool (MemSize
);
2439 return EFI_OUT_OF_RESOURCES
;
2443 // Get user access information.
2446 mUserManager
->Current (mUserManager
, &CurrentUser
);
2450 // Get next user information.
2452 Status
= mUserManager
->GetNextInfo (mUserManager
, CurrentUser
, &UserInfo
);
2453 if (EFI_ERROR (Status
)) {
2457 Status
= mUserManager
->GetInfo (
2464 if (Status
== EFI_BUFFER_TOO_SMALL
) {
2467 Info
= AllocateZeroPool (MemSize
);
2469 return EFI_OUT_OF_RESOURCES
;
2471 Status
= mUserManager
->GetInfo (
2479 if (EFI_ERROR (Status
)) {
2484 // Check user information.
2486 if (Info
->InfoType
== EFI_USER_INFO_ACCESS_POLICY_RECORD
) {
2487 TotalLen
= Info
->InfoSize
- sizeof (EFI_USER_INFO
);
2490 // Get specified access information.
2492 while (CheckLen
< TotalLen
) {
2493 CopyMem (&Access
, (UINT8
*) (Info
+ 1) + CheckLen
, sizeof (Access
));
2494 if ((Access
.Type
== EFI_USER_INFO_ACCESS_ENROLL_SELF
) ||
2495 (Access
.Type
== EFI_USER_INFO_ACCESS_ENROLL_OTHERS
) ||
2496 (Access
.Type
== EFI_USER_INFO_ACCESS_MANAGE
)
2498 *AccessRight
= Access
.Type
;
2502 CheckLen
+= Access
.Size
;
2507 return EFI_NOT_FOUND
;