Directly use ImageHandle instead of &ImageHandle for wrong usage in TCG physical presence library. Signed-off-by: gdong1 Reviewed-by: xdu2 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12530 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			414 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			414 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  The header file for User identify Manager driver.
 | 
						|
    
 | 
						|
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
 | 
						|
This program and the accompanying materials 
 | 
						|
are licensed and made available under the terms and conditions of the BSD License 
 | 
						|
which accompanies this distribution.  The full text of the license may be found at 
 | 
						|
http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _USER_IDENTIFY_MANAGER_H_
 | 
						|
#define _USER_IDENTIFY_MANAGER_H_
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
 | 
						|
#include <Guid/GlobalVariable.h>
 | 
						|
#include <Guid/MdeModuleHii.h>
 | 
						|
 | 
						|
#include <Protocol/FormBrowser2.h>
 | 
						|
#include <Protocol/HiiDatabase.h>
 | 
						|
#include <Protocol/HiiConfigAccess.h>
 | 
						|
#include <Protocol/HiiString.h>
 | 
						|
#include <Protocol/HiiConfigRouting.h>
 | 
						|
#include <Protocol/UserCredential2.h>
 | 
						|
#include <Protocol/UserManager.h>
 | 
						|
#include <Protocol/DeferredImageLoad.h>
 | 
						|
#include <Protocol/SimpleTextOut.h>
 | 
						|
#include <Protocol/SimpleTextIn.h>
 | 
						|
#include <Protocol/SimpleTextInEx.h>
 | 
						|
 | 
						|
#include <Library/UefiRuntimeServicesTableLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/DevicePathLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/PrintLib.h>
 | 
						|
#include <Library/HiiLib.h>
 | 
						|
 | 
						|
#include "UserIdentifyManagerData.h"
 | 
						|
 | 
						|
//
 | 
						|
// This is the generated IFR binary data for each formset defined in VFR.
 | 
						|
// This data array is ready to be used as input of HiiAddPackages() to
 | 
						|
// create a packagelist.
 | 
						|
//
 | 
						|
extern UINT8                UserIdentifyManagerVfrBin[];
 | 
						|
 | 
						|
//
 | 
						|
// This is the generated String package data for all .UNI files.
 | 
						|
// This data array is ready to be used as input of HiiAddPackages() to
 | 
						|
// create a packagelist.
 | 
						|
//
 | 
						|
extern UINT8                UserIdentifyManagerStrings[];
 | 
						|
 | 
						|
#define   USER_NUMBER_INC           32
 | 
						|
#define   DEFAULT_PROFILE_SIZE      512
 | 
						|
#define   INFO_PAYLOAD_SIZE         64
 | 
						|
 | 
						|
//
 | 
						|
// Credential Provider Information.
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  UINTN                         Count;
 | 
						|
  EFI_USER_CREDENTIAL2_PROTOCOL *Provider[1];
 | 
						|
} CREDENTIAL_PROVIDER_INFO;
 | 
						|
 | 
						|
//
 | 
						|
// Internal user profile entry.
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  UINTN   MaxProfileSize;
 | 
						|
  UINTN   UserProfileSize;
 | 
						|
  CHAR16  UserVarName[9];
 | 
						|
  UINT8   *ProfileInfo;
 | 
						|
} USER_PROFILE_ENTRY;
 | 
						|
 | 
						|
//
 | 
						|
// Internal user profile database.
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  UINTN                   UserProfileNum;
 | 
						|
  UINTN                   MaxProfileNum;
 | 
						|
  EFI_USER_PROFILE_HANDLE UserProfile[1];
 | 
						|
} USER_PROFILE_DB;
 | 
						|
 | 
						|
#define USER_MANAGER_SIGNATURE  SIGNATURE_32 ('U', 'I', 'M', 'S')
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN                           Signature;
 | 
						|
  EFI_HANDLE                      DriverHandle;
 | 
						|
  EFI_HII_HANDLE                  HiiHandle;
 | 
						|
 | 
						|
  //
 | 
						|
  // Consumed protocol.
 | 
						|
  //
 | 
						|
  EFI_HII_DATABASE_PROTOCOL       *HiiDatabase;
 | 
						|
  EFI_HII_STRING_PROTOCOL         *HiiString;
 | 
						|
  EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
 | 
						|
  EFI_FORM_BROWSER2_PROTOCOL      *FormBrowser2;
 | 
						|
 | 
						|
  //
 | 
						|
  // Produced protocol.
 | 
						|
  //
 | 
						|
  EFI_HII_CONFIG_ACCESS_PROTOCOL  ConfigAccess;
 | 
						|
} USER_MANAGER_CALLBACK_INFO;
 | 
						|
 | 
						|
///
 | 
						|
/// HII specific Vendor Device Path definition.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  VENDOR_DEVICE_PATH        VendorDevicePath;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL  End;
 | 
						|
} HII_VENDOR_DEVICE_PATH;
 | 
						|
 | 
						|
/**
 | 
						|
  Register an event notification function for the user profile changed.
 | 
						|
 | 
						|
  @param[in]  ImageHandle     Image handle this driver.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
LoadDeferredImageInit (
 | 
						|
  IN EFI_HANDLE        ImageHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  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               Protocol EFI_USER_MANAGER_PROTOCOL instance
 | 
						|
                                  pointer.
 | 
						|
  @param[out]  User               Handle of a new user profile.
 | 
						|
 | 
						|
  @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   User is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileCreate (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  OUT       EFI_USER_PROFILE_HANDLE             *User
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Delete an existing user profile.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance
 | 
						|
                                  pointer.
 | 
						|
  @param  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.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileDelete (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  IN        EFI_USER_PROFILE_HANDLE             User
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Get next user profile from the user profile database.
 | 
						|
 | 
						|
  @param[in]       This           Protocol EFI_USER_MANAGER_PROTOCOL instance
 | 
						|
                                  pointer.
 | 
						|
  @param[in, out]  User           User profile handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Next enrolled user profile successfully returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   User is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileGetNext (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  IN OUT    EFI_USER_PROFILE_HANDLE             *User
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function returns the current user profile handle.
 | 
						|
 | 
						|
  @param[in]  This                Protocol EFI_USER_MANAGER_PROTOCOL instance pointer.
 | 
						|
  @param[out]  CurrentUser        User profile handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Current user profile handle returned successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   CurrentUser is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileCurrent (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  OUT       EFI_USER_PROFILE_HANDLE             *CurrentUser
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Identify the user and, if authenticated, returns the user handle and changes
 | 
						|
  the current user profile.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance pointer.
 | 
						|
  @param  CurrentUser             User profile handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             User was successfully identified.
 | 
						|
  @retval EFI_INVALID_PARAMETER   User is NULL.
 | 
						|
  @retval EFI_ACCESS_DENIED       User was not successfully identified.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileIdentify (
 | 
						|
  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 passed the 
 | 
						|
  EFI_USER_INFO header.
 | 
						|
 | 
						|
  @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 NULL, 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.
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileFind (
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function returns user information.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance
 | 
						|
                                  pointer.
 | 
						|
  @param  User                    Handle of the user whose profile will be
 | 
						|
                                  retrieved.
 | 
						|
  @param  UserInfo                Handle of the user information data record.
 | 
						|
  @param  Info                    On entry, points to a buffer of at least
 | 
						|
                                  *InfoSize bytes.  On exit, holds the user
 | 
						|
                                  information.
 | 
						|
  @param  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.
 | 
						|
                                  EFI_BUFFER_TOO_SMALL- The number of bytes
 | 
						|
                                  specified by *InfoSize is too small to hold the
 | 
						|
                                  returned data.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileGetInfo (
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function changes user information.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance
 | 
						|
                                  pointer.
 | 
						|
  @param  User                    Handle of the user whose profile will be
 | 
						|
                                  retrieved.
 | 
						|
  @param  UserInfo                Handle of the user information data record.
 | 
						|
  @param  Info                    Points to the user information.
 | 
						|
  @param  InfoSize                The size of Info, in bytes.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             User profile information was successfully
 | 
						|
                                  changed/added.
 | 
						|
  @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.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileSetInfo (
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function allows the credential provider to notify the User Identity Manager
 | 
						|
  when user status has changed while deselected.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance
 | 
						|
                                  pointer.
 | 
						|
  @param  Changed                 Points to the 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.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileNotify (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  IN        EFI_HANDLE                          Changed
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Delete the user information attached to the user profile specified by the UserInfo.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance pointer.
 | 
						|
  @param  User                    Handle of the user whose profile will be retrieved.
 | 
						|
  @param  UserInfo                Handle of the user information data record.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             User information deleted successfully.
 | 
						|
  @retval EFI_ACCESS_DENIED       The current user does not have permission to
 | 
						|
                                  delete this user in-formation.
 | 
						|
  @retval EFI_NOT_FOUND           User information record UserInfo does not exist
 | 
						|
                                  in the user pro-file.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileDeleteInfo (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  IN        EFI_USER_PROFILE_HANDLE             User,
 | 
						|
  IN        EFI_USER_INFO_HANDLE                UserInfo
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function returns the next user information record.
 | 
						|
 | 
						|
  @param  This                    Protocol EFI_USER_MANAGER_PROTOCOL instance pointer.
 | 
						|
  @param  User                    Handle of the user whose profile will be retrieved.
 | 
						|
  @param  UserInfo                Handle of the user information data record.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             User information returned.
 | 
						|
  @retval EFI_NOT_FOUND           No more user information found.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UserProfileGetNextInfo (
 | 
						|
  IN CONST  EFI_USER_MANAGER_PROTOCOL           *This,
 | 
						|
  IN        EFI_USER_PROFILE_HANDLE             User,
 | 
						|
  IN OUT    EFI_USER_INFO_HANDLE                *UserInfo
 | 
						|
  );
 | 
						|
  
 | 
						|
#endif
 |