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
 |