REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			619 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			619 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   UEFI User Manager Protocol definition.
 | |
| 
 | |
|   This protocol manages user profiles.
 | |
| 
 | |
|   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __USER_MANAGER_H__
 | |
| #define __USER_MANAGER_H__
 | |
| 
 | |
| ///
 | |
| /// Global ID for the User Manager Protocol
 | |
| ///
 | |
| #define EFI_USER_MANAGER_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x6fd5b00c, 0xd426, 0x4283, { 0x98, 0x87, 0x6c, 0xf5, 0xcf, 0x1c, 0xb1, 0xfe } \
 | |
|   }
 | |
| 
 | |
| #define EFI_EVENT_GROUP_USER_PROFILE_CHANGED \
 | |
|   { \
 | |
|     0xbaf1e6de, 0x209e, 0x4adb, { 0x8d, 0x96, 0xfd, 0x8b, 0x71, 0xf3, 0xf6, 0x83 } \
 | |
|   }
 | |
| 
 | |
| typedef VOID  *EFI_USER_PROFILE_HANDLE;
 | |
| typedef VOID  *EFI_USER_INFO_HANDLE;
 | |
| 
 | |
| ///
 | |
| /// The attributes of the user profile information.
 | |
| ///
 | |
| typedef UINT16 EFI_USER_INFO_ATTRIBS;
 | |
| #define EFI_USER_INFO_STORAGE                0x000F
 | |
| #define EFI_USER_INFO_STORAGE_VOLATILE       0x0000
 | |
| #define EFI_USER_INFO_STORAGE_CREDENTIAL_NV  0x0001
 | |
| #define EFI_USER_INFO_STORAGE_PLATFORM_NV    0x0002
 | |
| 
 | |
| #define EFI_USER_INFO_ACCESS     0x0070
 | |
| #define EFI_USER_INFO_PUBLIC     0x0010
 | |
| #define EFI_USER_INFO_PRIVATE    0x0020
 | |
| #define EFI_USER_INFO_PROTECTED  0x0030
 | |
| #define EFI_USER_INFO_EXCLUSIVE  0x0080
 | |
| 
 | |
| ///
 | |
| /// User information structure
 | |
| ///
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// The user credential identifier associated with this user information or else Nil if the
 | |
|   /// information is not associated with any specific credential.
 | |
|   ///
 | |
|   EFI_GUID                 Credential;
 | |
|   ///
 | |
|   /// The type of user information.
 | |
|   ///
 | |
|   UINT8                    InfoType;
 | |
|   ///
 | |
|   /// Must be set to 0.
 | |
|   ///
 | |
|   UINT8                    Reserved1;
 | |
|   ///
 | |
|   /// The attributes of the user profile information.
 | |
|   ///
 | |
|   EFI_USER_INFO_ATTRIBS    InfoAttribs;
 | |
|   ///
 | |
|   /// The size of the user information, in bytes, including this header.
 | |
|   ///
 | |
|   UINT32                   InfoSize;
 | |
| } EFI_USER_INFO;
 | |
| 
 | |
| ///
 | |
| /// User credential class GUIDs
 | |
| ///
 | |
| #define EFI_USER_CREDENTIAL_CLASS_UNKNOWN \
 | |
|   { 0x5cf32e68, 0x7660, 0x449b, { 0x80, 0xe6, 0x7e, 0xa3, 0x6e, 0x3, 0xf6, 0xa8 } }
 | |
| #define EFI_USER_CREDENTIAL_CLASS_PASSWORD \
 | |
|   { 0xf8e5058c, 0xccb6, 0x4714, { 0xb2, 0x20, 0x3f, 0x7e, 0x3a, 0x64, 0xb, 0xd1 } }
 | |
| #define EFI_USER_CREDENTIAL_CLASS_SMART_CARD \
 | |
|   { 0x5f03ba33, 0x8c6b, 0x4c24, { 0xaa, 0x2e, 0x14, 0xa2, 0x65, 0x7b, 0xd4, 0x54 } }
 | |
| #define EFI_USER_CREDENTIAL_CLASS_FINGERPRINT \
 | |
|   { 0x32cba21f, 0xf308, 0x4cbc, { 0x9a, 0xb5, 0xf5, 0xa3, 0x69, 0x9f, 0x4, 0x4a } }
 | |
| #define EFI_USER_CREDENTIAL_CLASS_HANDPRINT \
 | |
|   { 0x5917ef16, 0xf723, 0x4bb9, { 0xa6, 0x4b, 0xd8, 0xc5, 0x32, 0xf4, 0xd8, 0xb5 } }
 | |
| #define EFI_USER_CREDENTIAL_CLASS_SECURE_CARD \
 | |
|   { 0x8a6b4a83, 0x42fe, 0x45d2, { 0xa2, 0xef, 0x46, 0xf0, 0x6c, 0x7d, 0x98, 0x52 } }
 | |
| 
 | |
| typedef UINT64 EFI_CREDENTIAL_CAPABILITIES;
 | |
| #define EFI_CREDENTIAL_CAPABILITIES_ENROLL  0x0000000000000001
 | |
| 
 | |
| ///
 | |
| /// Credential logon flags
 | |
| ///
 | |
| typedef UINT32 EFI_CREDENTIAL_LOGON_FLAGS;
 | |
| #define EFI_CREDENTIAL_LOGON_FLAG_AUTO     0x00000001
 | |
| #define EFI_CREDENTIAL_LOGON_FLAG_DEFAULT  0x00000002
 | |
| 
 | |
| ///
 | |
| /// User information record types
 | |
| ///
 | |
| 
 | |
| ///
 | |
| /// No information.
 | |
| ///
 | |
| #define EFI_USER_INFO_EMPTY_RECORD  0x00
 | |
| ///
 | |
| /// Provide the user's name for the enrolled user.
 | |
| ///
 | |
| #define EFI_USER_INFO_NAME_RECORD  0x01
 | |
| typedef CHAR16 *EFI_USER_INFO_NAME;
 | |
| ///
 | |
| /// Provides the date and time when the user profile was created.
 | |
| ///
 | |
| #define EFI_USER_INFO_CREATE_DATE_RECORD  0x02
 | |
| typedef EFI_TIME EFI_USER_INFO_CREATE_DATE;
 | |
| ///
 | |
| /// Provides the date and time when the user profile was selected.
 | |
| ///
 | |
| #define EFI_USER_INFO_USAGE_DATE_RECORD  0x03
 | |
| typedef EFI_TIME EFI_USER_INFO_USAGE_DATE;
 | |
| ///
 | |
| /// Provides the number of times that the user profile has been selected.
 | |
| ///
 | |
| #define EFI_USER_INFO_USAGE_COUNT_RECORD  0x04
 | |
| typedef UINT64 EFI_USER_INFO_USAGE_COUNT;
 | |
| ///
 | |
| /// Provides a unique non-volatile user identifier for each enrolled user.
 | |
| ///
 | |
| #define EFI_USER_INFO_IDENTIFIER_RECORD  0x05
 | |
| typedef UINT8 EFI_USER_INFO_IDENTIFIER[16];
 | |
| ///
 | |
| /// Specifies the type of a particular credential associated with the user profile.
 | |
| ///
 | |
| #define EFI_USER_INFO_CREDENTIAL_TYPE_RECORD  0x06
 | |
| typedef EFI_GUID EFI_USER_INFO_CREDENTIAL_TYPE;
 | |
| ///
 | |
| /// Specifies the user-readable name of a particular credential type.
 | |
| ///
 | |
| #define EFI_USER_INFO_CREDENTIAL_TYPE_NAME_RECORD  0x07
 | |
| typedef CHAR16 *EFI_USER_INFO_CREDENTIAL_TYPE_NAME;
 | |
| ///
 | |
| /// Specifies the credential provider.
 | |
| ///
 | |
| #define EFI_USER_INFO_CREDENTIAL_PROVIDER_RECORD  0x08
 | |
| typedef EFI_GUID EFI_USER_INFO_CREDENTIAL_PROVIDER;
 | |
| ///
 | |
| /// Specifies the user-readable name of a particular credential's provider.
 | |
| ///
 | |
| #define EFI_USER_INFO_CREDENTIAL_PROVIDER_NAME_RECORD  0x09
 | |
| typedef CHAR16 *EFI_USER_INFO_CREDENTIAL_PROVIDER_NAME;
 | |
| ///
 | |
| /// Provides PKCS#11 credential information from a smart card.
 | |
| ///
 | |
| #define EFI_USER_INFO_PKCS11_RECORD  0x0A
 | |
| ///
 | |
| /// Provides standard biometric information in the format specified by the ISO 19785 (Common
 | |
| /// Biometric Exchange Formats Framework) specification.
 | |
| ///
 | |
| #define EFI_USER_INFO_CBEFF_RECORD  0x0B
 | |
| typedef VOID *EFI_USER_INFO_CBEFF;
 | |
| ///
 | |
| /// Indicates how close of a match the fingerprint must be in order to be considered a match.
 | |
| ///
 | |
| #define EFI_USER_INFO_FAR_RECORD  0x0C
 | |
| typedef UINT8 EFI_USER_INFO_FAR;
 | |
| ///
 | |
| /// Indicates how many attempts the user has to with a particular credential before the system prevents
 | |
| /// further attempts.
 | |
| ///
 | |
| #define EFI_USER_INFO_RETRY_RECORD  0x0D
 | |
| typedef UINT8 EFI_USER_INFO_RETRY;
 | |
| ///
 | |
| /// Provides the user's pre-OS access rights.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_POLICY_RECORD  0x0E
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32    Type; ///< Specifies the type of user access control.
 | |
|   UINT32    Size; ///< Specifies the size of the user access control record, in bytes, including this header.
 | |
| } EFI_USER_INFO_ACCESS_CONTROL;
 | |
| 
 | |
| typedef EFI_USER_INFO_ACCESS_CONTROL EFI_USER_INFO_ACCESS_POLICY;
 | |
| 
 | |
| ///
 | |
| /// User Information access types
 | |
| ///
 | |
| 
 | |
| ///
 | |
| /// Forbids the user from booting or loading executables from the specified device path or any child
 | |
| /// device paths.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_FORBID_LOAD  0x00000001
 | |
| ///
 | |
| /// Permits the user from booting or loading executables from the specified device path or any child
 | |
| /// device paths.
 | |
| /// Note: in-consistency between code and the UEFI 2.3 specification here.
 | |
| /// The definition EFI_USER_INFO_ACCESS_PERMIT_BOOT in the specification should be typo and wait for
 | |
| /// spec update.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_PERMIT_LOAD  0x00000002
 | |
| ///
 | |
| /// Presence of this record indicates that a user can update enrollment information.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_ENROLL_SELF  0x00000003
 | |
| ///
 | |
| /// Presence of this record indicates that a user can enroll new users.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_ENROLL_OTHERS  0x00000004
 | |
| ///
 | |
| /// Presence of this record indicates that a user can update the user information of any user.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_MANAGE  0x00000005
 | |
| ///
 | |
| /// Describes permissions usable when configuring the platform.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_SETUP  0x00000006
 | |
| ///
 | |
| /// Standard GUIDs for access to configure the platform.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID \
 | |
|   { 0x85b75607, 0xf7ce, 0x471e, { 0xb7, 0xe4, 0x2a, 0xea, 0x5f, 0x72, 0x32, 0xee } }
 | |
| #define EFI_USER_INFO_ACCESS_SETUP_NORMAL_GUID \
 | |
|   { 0x1db29ae0, 0x9dcb, 0x43bc, { 0x8d, 0x87, 0x5d, 0xa1, 0x49, 0x64, 0xdd, 0xe2 } }
 | |
| #define EFI_USER_INFO_ACCESS_SETUP_RESTRICTED_GUID \
 | |
|   { 0xbdb38125, 0x4d63, 0x49f4, { 0x82, 0x12, 0x61, 0xcf, 0x5a, 0x19, 0xa, 0xf8 } }
 | |
| 
 | |
| ///
 | |
| /// Forbids UEFI drivers from being started from the specified device path(s) or any child device paths.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_FORBID_CONNECT  0x00000007
 | |
| ///
 | |
| /// Permits UEFI drivers to be started on the specified device path(s) or any child device paths.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_PERMIT_CONNECT  0x00000008
 | |
| ///
 | |
| /// Modifies the boot order.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_BOOT_ORDER  0x00000009
 | |
| typedef UINT32 EFI_USER_INFO_ACCESS_BOOT_ORDER_HDR;
 | |
| 
 | |
| #define EFI_USER_INFO_ACCESS_BOOT_ORDER_MASK  0x0000000F
 | |
| ///
 | |
| /// Insert new boot options at the beginning of the boot order.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_BOOT_ORDER_INSERT  0x00000000
 | |
| ///
 | |
| /// Append new boot options to the end of the boot order.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_BOOT_ORDER_APPEND  0x00000001
 | |
| ///
 | |
| /// Replace the entire boot order.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_BOOT_ORDER_REPLACE  0x00000002
 | |
| ///
 | |
| /// The Boot Manager will not attempt find a default boot device
 | |
| /// when the default boot order is does not lead to a bootable device.
 | |
| ///
 | |
| #define EFI_USER_INFO_ACCESS_BOOT_ORDER_NODEFAULT  0x00000010
 | |
| 
 | |
| ///
 | |
| /// Provides the expression which determines which credentials are required to assert user identity.
 | |
| ///
 | |
| #define EFI_USER_INFO_IDENTITY_POLICY_RECORD  0x0F
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32    Type;   ///< Specifies either an operator or a data item.
 | |
|   UINT32    Length; ///< The length of this block, in bytes, including this header.
 | |
| } EFI_USER_INFO_IDENTITY_POLICY;
 | |
| 
 | |
| ///
 | |
| /// User identity policy expression operators.
 | |
| ///
 | |
| #define EFI_USER_INFO_IDENTITY_FALSE                0x00
 | |
| #define EFI_USER_INFO_IDENTITY_TRUE                 0x01
 | |
| #define EFI_USER_INFO_IDENTITY_CREDENTIAL_TYPE      0x02
 | |
| #define EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER  0x03
 | |
| #define EFI_USER_INFO_IDENTITY_NOT                  0x10
 | |
| #define EFI_USER_INFO_IDENTITY_AND                  0x11
 | |
| #define EFI_USER_INFO_IDENTITY_OR                   0x12
 | |
| 
 | |
| ///
 | |
| /// Provides placeholder for additional user profile information identified by a GUID.
 | |
| ///
 | |
| #define EFI_USER_INFO_GUID_RECORD  0xFF
 | |
| typedef EFI_GUID EFI_USER_INFO_GUID;
 | |
| 
 | |
| ///
 | |
| /// User information table
 | |
| /// A collection of EFI_USER_INFO records, prefixed with this header.
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT64    Size; ///< Total size of the user information table, in bytes.
 | |
| } EFI_USER_INFO_TABLE;
 | |
| 
 | |
| typedef struct _EFI_USER_MANAGER_PROTOCOL EFI_USER_MANAGER_PROTOCOL;
 | |
| 
 | |
| /**
 | |
|   Create a new user profile.
 | |
| 
 | |
|   This function creates a new user profile with only a new user identifier attached and returns its
 | |
|   handle. The user profile is non-volatile, but the handle User can change across reboots.
 | |
| 
 | |
|   @param[in]  This               Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[out] User               On return, points to the new user profile handle.
 | |
|                                  The user profile handle is unique only during this boot.
 | |
| 
 | |
|   @retval EFI_SUCCESS            User profile was successfully created.
 | |
|   @retval EFI_ACCESS_DENIED      Current user does not have sufficient permissions to create a user profile.
 | |
|   @retval EFI_UNSUPPORTED        Creation of new user profiles is not supported.
 | |
|   @retval EFI_INVALID_PARAMETER  The User parameter is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_CREATE)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   OUT      EFI_USER_PROFILE_HANDLE    *User
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Delete an existing user profile.
 | |
| 
 | |
|   @param[in] This                Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in] User                User profile handle.
 | |
| 
 | |
|   @retval EFI_SUCCESS            User profile was successfully deleted.
 | |
|   @retval EFI_ACCESS_DENIED      Current user does not have sufficient permissions to delete a user
 | |
|                                  profile or there is only one user profile.
 | |
|   @retval EFI_UNSUPPORTED        Deletion of new user profiles is not supported.
 | |
|   @retval EFI_INVALID_PARAMETER  User does not refer to a valid user profile.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_DELETE)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN       EFI_USER_PROFILE_HANDLE    User
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Enumerate all of the enrolled users on the platform.
 | |
| 
 | |
|   This function returns the next enrolled user profile. To retrieve the first user profile handle, point
 | |
|   User at a NULL. Each subsequent call will retrieve another user profile handle until there are no
 | |
|   more, at which point User will point to NULL.
 | |
| 
 | |
|   @param[in]     This            Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in,out] User            On entry, points to the previous user profile handle or NULL to
 | |
|                                  start enumeration. On exit, points to the next user profile handle
 | |
|                                  or NULL if there are no more user profiles.
 | |
| 
 | |
|   @retval EFI_SUCCESS            Next enrolled user profile successfully returned.
 | |
|   @retval EFI_ACCESS_DENIED      Next enrolled user profile was not successfully returned.
 | |
|   @retval EFI_INVALID_PARAMETER  The User parameter is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_GET_NEXT)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN OUT   EFI_USER_PROFILE_HANDLE    *User
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Return the current user profile handle.
 | |
| 
 | |
|   @param[in]  This               Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[out] CurrentUser        On return, points to the current user profile handle.
 | |
| 
 | |
|   @retval EFI_SUCCESS            Current user profile handle returned successfully.
 | |
|   @retval EFI_INVALID_PARAMETER  The CurrentUser parameter is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_CURRENT)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   OUT      EFI_USER_PROFILE_HANDLE    *CurrentUser
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Identify a user.
 | |
| 
 | |
|   Identify the user and, if authenticated, returns the user handle and changes the current user profile.
 | |
|   All user information marked as private in a previously selected profile is no longer available for
 | |
|   inspection.
 | |
|   Whenever the current user profile is changed then the an event with the GUID
 | |
|   EFI_EVENT_GROUP_USER_PROFILE_CHANGED is signaled.
 | |
| 
 | |
|   @param[in]  This               Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[out] User               On return, points to the user profile handle for the current user profile.
 | |
| 
 | |
|   @retval EFI_SUCCESS            User was successfully identified.
 | |
|   @retval EFI_ACCESS_DENIED      User was not successfully identified.
 | |
|   @retval EFI_INVALID_PARAMETER  The User parameter is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_IDENTIFY)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   OUT      EFI_USER_PROFILE_HANDLE    *User
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Find a user using a user information record.
 | |
| 
 | |
|   This function searches all user profiles for the specified user information record. The search starts
 | |
|   with the user information record handle following UserInfo and continues until either the
 | |
|   information is found or there are no more user profiles.
 | |
|   A match occurs when the Info.InfoType field matches the user information record type and the
 | |
|   user information record data matches the portion of Info.
 | |
| 
 | |
|   @param[in]     This      Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in,out] User      On entry, points to the previously returned user profile handle or NULL to start
 | |
|                            searching with the first user profile. On return, points to the user profile handle or
 | |
|                            NULL if not found.
 | |
|   @param[in,out] UserInfo  On entry, points to the previously returned user information handle or NULL to start
 | |
|                            searching with the first. On return, points to the user information handle of the user
 | |
|                            information record or NULL if not found. Can be NULL, in which case only one user
 | |
|                            information record per user can be returned.
 | |
|   @param[in]     Info      Points to the buffer containing the user information to be compared to the user
 | |
|                            information record. If the user information record data is empty, then only the user
 | |
|                            information record type is compared.
 | |
|                            If InfoSize is 0, then the user information record must be empty.
 | |
| 
 | |
|   @param[in]     InfoSize  The size of Info, in bytes.
 | |
| 
 | |
|   @retval EFI_SUCCESS           User information was found. User points to the user profile handle and UserInfo
 | |
|                                 points to the user information handle.
 | |
|   @retval EFI_NOT_FOUND         User information was not found. User points to NULL and UserInfo points to NULL.
 | |
|   @retval EFI_INVALID_PARAMETER User is NULL. Or Info is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_FIND)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN OUT   EFI_USER_PROFILE_HANDLE    *User,
 | |
|   IN OUT   EFI_USER_INFO_HANDLE       *UserInfo OPTIONAL,
 | |
|   IN CONST EFI_USER_INFO              *Info,
 | |
|   IN       UINTN                      InfoSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Called by credential provider to notify of information change.
 | |
| 
 | |
|   This function allows the credential provider to notify the User Identity Manager when user status
 | |
|   has changed.
 | |
|   If the User Identity Manager doesn't support asynchronous changes in credentials, then this function
 | |
|   should return EFI_UNSUPPORTED.
 | |
|   If current user does not exist, and the credential provider can identify a user, then make the user
 | |
|   to be current user and signal the EFI_EVENT_GROUP_USER_PROFILE_CHANGED event.
 | |
|   If current user already exists, and the credential provider can identify another user, then switch
 | |
|   current user to the newly identified user, and signal the EFI_EVENT_GROUP_USER_PROFILE_CHANGED event.
 | |
|   If current user was identified by this credential provider and now the credential provider cannot identify
 | |
|   current user, then logout current user and signal the EFI_EVENT_GROUP_USER_PROFILE_CHANGED event.
 | |
| 
 | |
|   @param[in] This          Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in] Changed       Handle on which is installed an instance of the
 | |
|                            EFI_USER_CREDENTIAL_PROTOCOL where the user has changed.
 | |
| 
 | |
|   @retval EFI_SUCCESS      The User Identity Manager has handled the notification.
 | |
|   @retval EFI_NOT_READY    The function was called while the specified credential provider was not selected.
 | |
|   @retval EFI_UNSUPPORTED  The User Identity Manager doesn't support asynchronous notifications.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_NOTIFY)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN       EFI_HANDLE                 Changed
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Return information attached to the user.
 | |
| 
 | |
|   This function returns user information. The format of the information is described in User
 | |
|   Information. The function may return EFI_ACCESS_DENIED if the information is marked private
 | |
|   and the handle specified by User is not the current user profile. The function may return
 | |
|   EFI_ACCESS_DENIED if the information is marked protected and the information is associated
 | |
|   with a credential provider for which the user has not been authenticated.
 | |
| 
 | |
|   @param[in]     This           Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in]     User           Handle of the user whose profile will be retrieved.
 | |
|   @param[in]     UserInfo       Handle of the user information data record.
 | |
|   @param[out]    Info           On entry, points to a buffer of at least *InfoSize bytes. On exit, holds the user
 | |
|                                 information. If the buffer is too small to hold the information, then
 | |
|                                 EFI_BUFFER_TOO_SMALL is returned and InfoSize is updated to contain the
 | |
|                                 number of bytes actually required.
 | |
|   @param[in,out] InfoSize       On entry, points to the size of Info. On return, points to the size of the user
 | |
|                                 information.
 | |
| 
 | |
|   @retval EFI_SUCCESS           Information returned successfully.
 | |
|   @retval EFI_ACCESS_DENIED     The information about the specified user cannot be accessed by the current user.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  The number of bytes specified by *InfoSize is too small to hold
 | |
|                                 the returned data. The actual size required is returned in *InfoSize.
 | |
|   @retval EFI_NOT_FOUND         User does not refer to a valid user profile or UserInfo does not refer to a valid
 | |
|                                 user info handle.
 | |
|   @retval EFI_INVALID_PARAMETER Info is NULL or InfoSize is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_GET_INFO)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN       EFI_USER_PROFILE_HANDLE    User,
 | |
|   IN       EFI_USER_INFO_HANDLE       UserInfo,
 | |
|   OUT      EFI_USER_INFO              *Info,
 | |
|   IN OUT   UINTN                      *InfoSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Add or update user information.
 | |
| 
 | |
|   This function changes user information.  If NULL is pointed to by UserInfo, then a new user
 | |
|   information record is created and its handle is returned in UserInfo. Otherwise, the existing one is
 | |
|   replaced.
 | |
|   If EFI_USER_INFO_IDENTITY_POLICY_RECORD is changed, it is the caller's responsibility to keep it to
 | |
|   be synced with the information on credential providers.
 | |
|   If EFI_USER_INFO_EXCLUSIVE is specified in Info and a user information record of the same
 | |
|   type already exists in the user profile, then EFI_ACCESS_DENIED will be returned and
 | |
|   UserInfo will point to the handle of the existing record.
 | |
| 
 | |
|   @param[in]     This             Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in]     User             Handle of the user whose profile will be retrieved.
 | |
|   @param[in,out] UserInfo         Handle of the user information data record.
 | |
|   @param[in]     Info             On entry, points to a buffer of at least *InfoSize bytes. On exit, holds the user
 | |
|                                   information. If the buffer is too small to hold the information, then
 | |
|                                   EFI_BUFFER_TOO_SMALL is returned and InfoSize is updated to contain the
 | |
|                                   number of bytes actually required.
 | |
|   @param[in]     InfoSize         On entry, points to the size of Info. On return, points to the size of the user
 | |
|                                   information.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Information returned successfully.
 | |
|   @retval EFI_ACCESS_DENIED       The record is exclusive.
 | |
|   @retval EFI_SECURITY_VIOLATION  The current user does not have permission to change the specified
 | |
|                                   user profile or user information record.
 | |
|   @retval EFI_NOT_FOUND           User does not refer to a valid user profile or UserInfo does not refer to a valid
 | |
|                                   user info handle.
 | |
|   @retval EFI_INVALID_PARAMETER   UserInfo is NULL or Info is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_SET_INFO)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN       EFI_USER_PROFILE_HANDLE    User,
 | |
|   IN OUT   EFI_USER_INFO_HANDLE       *UserInfo,
 | |
|   IN CONST EFI_USER_INFO              *Info,
 | |
|   IN       UINTN                      InfoSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Delete user information.
 | |
| 
 | |
|   Delete the user information attached to the user profile specified by the UserInfo.
 | |
| 
 | |
|   @param[in] This            Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in] User            Handle of the user whose information will be deleted.
 | |
|   @param[in] UserInfo        Handle of the user information to remove.
 | |
| 
 | |
|   @retval EFI_SUCCESS        User information deleted successfully.
 | |
|   @retval EFI_NOT_FOUND      User information record UserInfo does not exist in the user profile.
 | |
|   @retval EFI_ACCESS_DENIED  The current user does not have permission to delete this user information.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_DELETE_INFO)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN       EFI_USER_PROFILE_HANDLE    User,
 | |
|   IN       EFI_USER_INFO_HANDLE       UserInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Enumerate user information of all the enrolled users on the platform.
 | |
| 
 | |
|   This function returns the next user information record. To retrieve the first user information record
 | |
|   handle, point UserInfo at a NULL. Each subsequent call will retrieve another user information
 | |
|   record handle until there are no more, at which point UserInfo will point to NULL.
 | |
| 
 | |
|   @param[in]     This           Points to this instance of the EFI_USER_MANAGER_PROTOCOL.
 | |
|   @param[in]     User           Handle of the user whose information will be deleted.
 | |
|   @param[in,out] UserInfo       Handle of the user information to remove.
 | |
| 
 | |
|   @retval EFI_SUCCESS           User information returned.
 | |
|   @retval EFI_NOT_FOUND         No more user information found.
 | |
|   @retval EFI_INVALID_PARAMETER UserInfo is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_USER_PROFILE_GET_NEXT_INFO)(
 | |
|   IN CONST EFI_USER_MANAGER_PROTOCOL  *This,
 | |
|   IN       EFI_USER_PROFILE_HANDLE    User,
 | |
|   IN OUT   EFI_USER_INFO_HANDLE       *UserInfo
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// This protocol provides the services used to manage user profiles.
 | |
| ///
 | |
| struct _EFI_USER_MANAGER_PROTOCOL {
 | |
|   EFI_USER_PROFILE_CREATE           Create;
 | |
|   EFI_USER_PROFILE_DELETE           Delete;
 | |
|   EFI_USER_PROFILE_GET_NEXT         GetNext;
 | |
|   EFI_USER_PROFILE_CURRENT          Current;
 | |
|   EFI_USER_PROFILE_IDENTIFY         Identify;
 | |
|   EFI_USER_PROFILE_FIND             Find;
 | |
|   EFI_USER_PROFILE_NOTIFY           Notify;
 | |
|   EFI_USER_PROFILE_GET_INFO         GetInfo;
 | |
|   EFI_USER_PROFILE_SET_INFO         SetInfo;
 | |
|   EFI_USER_PROFILE_DELETE_INFO      DeleteInfo;
 | |
|   EFI_USER_PROFILE_GET_NEXT_INFO    GetNextInfo;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID  gEfiUserManagerProtocolGuid;
 | |
| extern EFI_GUID  gEfiEventUserProfileChangedGuid;
 | |
| extern EFI_GUID  gEfiUserCredentialClassUnknownGuid;
 | |
| extern EFI_GUID  gEfiUserCredentialClassPasswordGuid;
 | |
| extern EFI_GUID  gEfiUserCredentialClassSmartCardGuid;
 | |
| extern EFI_GUID  gEfiUserCredentialClassFingerprintGuid;
 | |
| extern EFI_GUID  gEfiUserCredentialClassHandprintGuid;
 | |
| extern EFI_GUID  gEfiUserCredentialClassSecureCardGuid;
 | |
| extern EFI_GUID  gEfiUserInfoAccessSetupAdminGuid;
 | |
| extern EFI_GUID  gEfiUserInfoAccessSetupNormalGuid;
 | |
| extern EFI_GUID  gEfiUserInfoAccessSetupRestrictedGuid;
 | |
| 
 | |
| #endif
 |