+typedef VOID *EFI_USER_PROFILE_HANDLE;\r
+typedef VOID *EFI_USER_INFO_HANDLE;\r
+\r
+///\r
+/// The attributes of the user profile information.\r
+///\r
+typedef UINT16 EFI_USER_INFO_ATTRIBS;\r
+#define EFI_USER_INFO_STORAGE 0x000F\r
+#define EFI_USER_INFO_STORAGE_VOLATILE 0x0000\r
+#define EFI_USER_INFO_STORAGE_CREDENTIAL_NV 0x0001\r
+#define EFI_USER_INFO_STORAGE_PLATFORM_NV 0x0002\r
+\r
+#define EFI_USER_INFO_ACCESS 0x0070\r
+#define EFI_USER_INFO_PUBLIC 0x0010\r
+#define EFI_USER_INFO_PRIVATE 0x0020\r
+#define EFI_USER_INFO_PROTECTED 0x0030\r
+#define EFI_USER_INFO_EXCLUSIVE 0x0080\r
+\r
+///\r
+/// User information structure\r
+///\r
+typedef struct {\r
+ ///\r
+ /// The user credential identifier associated with this user information or else Nil if the \r
+ /// information is not associated with any specific credential.\r
+ ///\r
+ EFI_GUID Credential;\r
+ ///\r
+ /// The type of user information.\r
+ ///\r
+ UINT8 InfoType;\r
+ ///\r
+ /// Must be set to 0.\r
+ ///\r
+ UINT8 Reserved1;\r
+ ///\r
+ /// The attributes of the user profile information.\r
+ ///\r
+ EFI_USER_INFO_ATTRIBS InfoAttribs;\r
+ ///\r
+ /// The size of the user information, in bytes, including this header.\r
+ ///\r
+ UINT32 InfoSize;\r
+} EFI_USER_INFO;\r
+\r
+///\r
+/// User credential class GUIDs\r
+///\r
+#define EFI_USER_CREDENTIAL_CLASS_UNKNOWN \\r
+ { 0x5cf32e68, 0x7660, 0x449b, { 0x80, 0xe6, 0x7e, 0xa3, 0x6e, 0x3, 0xf6, 0xa8 } }\r
+#define EFI_USER_CREDENTIAL_CLASS_PASSWORD \\r
+ { 0xf8e5058c, 0xccb6, 0x4714, { 0xb2, 0x20, 0x3f, 0x7e, 0x3a, 0x64, 0xb, 0xd1 } }\r
+#define EFI_USER_CREDENTIAL_CLASS_SMART_CARD \\r
+ { 0x5f03ba33, 0x8c6b, 0x4c24, { 0xaa, 0x2e, 0x14, 0xa2, 0x65, 0x7b, 0xd4, 0x54 } }\r
+#define EFI_USER_CREDENTIAL_CLASS_FINGERPRINT \\r
+ { 0x32cba21f, 0xf308, 0x4cbc, { 0x9a, 0xb5, 0xf5, 0xa3, 0x69, 0x9f, 0x4, 0x4a } }\r
+#define EFI_USER_CREDENTIAL_CLASS_HANDPRINT \\r
+ { 0x5917ef16, 0xf723, 0x4bb9, { 0xa6, 0x4b, 0xd8, 0xc5, 0x32, 0xf4, 0xd8, 0xb5 } }\r
+#define EFI_USER_CREDENTIAL_CLASS_SECURE_CARD \\r
+ { 0x8a6b4a83, 0x42fe, 0x45d2, { 0xa2, 0xef, 0x46, 0xf0, 0x6c, 0x7d, 0x98, 0x52 } }\r
+\r
+typedef UINT64 EFI_CREDENTIAL_CAPABILITIES;\r
+#define EFI_CREDENTIAL_CAPABILITIES_ENROLL 0x0000000000000001\r
+\r
+///\r
+/// Credential logon flags \r
+///\r
+typedef UINT32 EFI_CREDENTIAL_LOGON_FLAGS;\r
+#define EFI_CREDENTIAL_LOGON_FLAG_AUTO 0x00000001\r
+#define EFI_CREDENTIAL_LOGON_FLAG_DEFAULT 0x00000002\r
+\r
+///\r
+/// User information record types\r
+///\r
+\r
+///\r
+/// No information.\r
+///\r
+#define EFI_USER_INFO_EMPTY_RECORD 0x00\r
+///\r
+/// Provide the user's name for the enrolled user.\r
+///\r
+#define EFI_USER_INFO_NAME_RECORD 0x01\r
+typedef CHAR16 *EFI_USER_INFO_NAME;\r
+///\r
+/// Provides the date and time when the user profile was created.\r
+///\r
+#define EFI_USER_INFO_CREATE_DATE_RECORD 0x02\r
+typedef EFI_TIME EFI_USER_INFO_CREATE_DATE;\r
+///\r
+/// Provides the date and time when the user profile was selected.\r
+///\r
+#define EFI_USER_INFO_USAGE_DATE_RECORD 0x03\r
+typedef EFI_TIME EFI_USER_INFO_USAGE_DATE;\r
+///\r
+/// Provides the number of times that the user profile has been selected.\r
+///\r
+#define EFI_USER_INFO_USAGE_COUNT_RECORD 0x04\r
+typedef UINT64 EFI_USER_INFO_USAGE_COUNT;\r
+///\r
+/// Provides a unique non-volatile user identifier for each enrolled user.\r
+///\r
+#define EFI_USER_INFO_IDENTIFIER_RECORD 0x05\r
+typedef UINT8 EFI_USER_INFO_IDENTIFIER[16];\r
+///\r
+/// Specifies the type of a particular credential associated with the user profile.\r
+///\r
+#define EFI_USER_INFO_CREDENTIAL_TYPE_RECORD 0x06\r
+typedef EFI_GUID EFI_USER_INFO_CREDENTIAL_TYPE;\r
+///\r
+/// Specifies the user-readable name of a particular credential type.\r
+///\r
+#define EFI_USER_INFO_CREDENTIAL_TYPE_NAME_RECORD 0x07\r
+typedef CHAR16 *EFI_USER_INFO_CREDENTIAL_TYPE_NAME;\r
+///\r
+/// Specifies the credential provider.\r
+///\r
+#define EFI_USER_INFO_CREDENTIAL_PROVIDER_RECORD 0x08\r
+typedef EFI_GUID EFI_USER_INFO_CREDENTIAL_PROVIDER;\r
+///\r
+/// Specifies the user-readable name of a particular credential's provider.\r
+///\r
+#define EFI_USER_INFO_CREDENTIAL_PROVIDER_NAME_RECORD 0x09\r
+typedef CHAR16 *EFI_USER_INFO_CREDENTIAL_PROVIDER_NAME;\r
+///\r
+/// Provides PKCS#11 credential information from a smart card.\r
+///\r
+#define EFI_USER_INFO_PKCS11_RECORD 0x0A\r
+///\r
+/// Provides standard biometric information in the format specified by the ISO 19785 (Common \r
+/// Biometric Exchange Formats Framework) specification.\r
+///\r
+#define EFI_USER_INFO_CBEFF_RECORD 0x0B\r
+typedef VOID *EFI_USER_INFO_CBEFF;\r
+///\r
+/// Indicates how close of a match the fingerprint must be in order to be considered a match.\r
+///\r
+#define EFI_USER_INFO_FAR_RECORD 0x0C\r
+typedef UINT8 EFI_USER_INFO_FAR;\r
+///\r
+/// Indicates how many attempts the user has to with a particular credential before the system prevents \r
+/// further attempts.\r
+///\r
+#define EFI_USER_INFO_RETRY_RECORD 0x0D\r
+typedef UINT8 EFI_USER_INFO_RETRY;\r
+///\r
+/// Provides the user's pre-OS access rights.\r
+///\r
+#define EFI_USER_INFO_ACCESS_POLICY_RECORD 0x0E\r
+\r
+typedef struct {\r
+ UINT32 Type; ///< Specifies the type of user access control.\r
+ UINT32 Size; ///< Specifies the size of the user access control record, in bytes, including this header.\r
+} EFI_USER_INFO_ACCESS_CONTROL;\r
+\r
+typedef EFI_USER_INFO_ACCESS_CONTROL EFI_USER_INFO_ACCESS_POLICY;\r
+\r
+///\r
+/// User Information access types\r
+///\r
+\r
+///\r
+/// Forbids the user from booting or loading executables from the specified device path or any child \r
+/// device paths.\r
+///\r
+#define EFI_USER_INFO_ACCESS_FORBID_LOAD 0x00000001\r
+///\r
+/// Permits the user from booting or loading executables from the specified device path or any child \r
+/// device paths.\r
+/// Note: in-consistency between code and the UEFI 2.3 specification here.\r
+/// The definition EFI_USER_INFO_ACCESS_PERMIT_BOOT in the specification should be typo and wait for\r
+/// spec update.\r
+///\r
+#define EFI_USER_INFO_ACCESS_PERMIT_LOAD 0x00000002\r
+///\r
+/// Presence of this record indicates that a user can update enrollment information.\r
+///\r
+#define EFI_USER_INFO_ACCESS_ENROLL_SELF 0x00000003\r
+///\r
+/// Presence of this record indicates that a user can enroll new users.\r
+///\r
+#define EFI_USER_INFO_ACCESS_ENROLL_OTHERS 0x00000004\r
+///\r
+/// Presence of this record indicates that a user can update the user information of any user.\r
+///\r
+#define EFI_USER_INFO_ACCESS_MANAGE 0x00000005\r
+///\r
+/// Describes permissions usable when configuring the platform.\r
+///\r
+#define EFI_USER_INFO_ACCESS_SETUP 0x00000006\r
+///\r
+/// Standard GUIDs for access to configure the platform.\r
+///\r
+#define EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID \\r
+ { 0x85b75607, 0xf7ce, 0x471e, { 0xb7, 0xe4, 0x2a, 0xea, 0x5f, 0x72, 0x32, 0xee } }\r
+#define EFI_USER_INFO_ACCESS_SETUP_NORMAL_GUID \\r
+ { 0x1db29ae0, 0x9dcb, 0x43bc, { 0x8d, 0x87, 0x5d, 0xa1, 0x49, 0x64, 0xdd, 0xe2 } }\r
+#define EFI_USER_INFO_ACCESS_SETUP_RESTRICTED_GUID \\r
+ { 0xbdb38125, 0x4d63, 0x49f4, { 0x82, 0x12, 0x61, 0xcf, 0x5a, 0x19, 0xa, 0xf8 } }\r
+\r
+///\r
+/// Forbids UEFI drivers from being started from the specified device path(s) or any child device paths.\r
+///\r
+#define EFI_USER_INFO_ACCESS_FORBID_CONNECT 0x00000007\r
+///\r
+/// Permits UEFI drivers to be started on the specified device path(s) or any child device paths.\r
+///\r
+#define EFI_USER_INFO_ACCESS_PERMIT_CONNECT 0x00000008\r
+///\r
+/// Modifies the boot order.\r
+///\r
+#define EFI_USER_INFO_ACCESS_BOOT_ORDER 0x00000009\r
+typedef UINT32 EFI_USER_INFO_ACCESS_BOOT_ORDER_HDR;\r
+\r
+#define EFI_USER_INFO_ACCESS_BOOT_ORDER_MASK 0x0000000F\r
+///\r
+/// Insert new boot options at the beginning of the boot order.\r
+///\r
+#define EFI_USER_INFO_ACCESS_BOOT_ORDER_INSERT 0x00000000\r
+///\r
+/// Append new boot options to the end of the boot order.\r
+///\r
+#define EFI_USER_INFO_ACCESS_BOOT_ORDER_APPEND 0x00000001\r
+///\r
+/// Replace the entire boot order.\r
+///\r
+#define EFI_USER_INFO_ACCESS_BOOT_ORDER_REPLACE 0x00000002\r
+///\r
+/// The Boot Manager will not attempt find a default boot device \r
+/// when the default boot order is does not lead to a bootable device.\r
+///\r
+#define EFI_USER_INFO_ACCESS_BOOT_ORDER_NODEFAULT 0x00000010\r
+\r
+///\r
+/// Provides the expression which determines which credentials are required to assert user identity.\r
+///\r
+#define EFI_USER_INFO_IDENTITY_POLICY_RECORD 0x0F\r
+\r
+typedef struct {\r
+ UINT32 Type; ///< Specifies either an operator or a data item. \r
+ UINT32 Length; ///< The length of this block, in bytes, including this header.\r
+} EFI_USER_INFO_IDENTITY_POLICY;\r
+\r
+///\r
+/// User identity policy expression operators.\r
+///\r
+#define EFI_USER_INFO_IDENTITY_FALSE 0x00\r
+#define EFI_USER_INFO_IDENTITY_TRUE 0x01\r
+#define EFI_USER_INFO_IDENTITY_CREDENTIAL_TYPE 0x02\r
+#define EFI_USER_INFO_IDENTITY_CREDENTIAL_PROVIDER 0x03\r
+#define EFI_USER_INFO_IDENTITY_NOT 0x10\r
+#define EFI_USER_INFO_IDENTITY_AND 0x11\r
+#define EFI_USER_INFO_IDENTITY_OR 0x12\r
+\r
+///\r
+/// Provides placeholder for additional user profile information identified by a GUID.\r
+///\r
+#define EFI_USER_INFO_GUID_RECORD 0xFF\r
+typedef EFI_GUID EFI_USER_INFO_GUID;\r
+\r
+///\r
+/// User information table\r
+/// A collection of EFI_USER_INFO records, prefixed with this header.\r
+///\r
+typedef struct {\r
+ UINT64 Size; ///< Total size of the user information table, in bytes.\r
+} EFI_USER_INFO_TABLE;\r
+\r