1 /** @file 2 The header file for user profile manager driver. 3 4 Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef __EFI_USER_PROFILE_MANAGER_H__ 16 #define __EFI_USER_PROFILE_MANAGER_H__ 17 18 #include <Uefi.h> 19 20 #include <Guid/GlobalVariable.h> 21 #include <Guid/MdeModuleHii.h> 22 23 #include <Protocol/HiiConfigAccess.h> 24 #include <Protocol/UserCredential2.h> 25 #include <Protocol/UserManager.h> 26 27 #include <Library/UefiRuntimeServicesTableLib.h> 28 #include <Library/UefiBootServicesTableLib.h> 29 #include <Library/MemoryAllocationLib.h> 30 #include <Library/BaseMemoryLib.h> 31 #include <Library/DevicePathLib.h> 32 #include <Library/DebugLib.h> 33 #include <Library/UefiLib.h> 34 #include <Library/PrintLib.h> 35 #include <Library/HiiLib.h> 36 37 #include "UserProfileManagerData.h" 38 39 #define USER_NAME_LENGTH 17 40 41 // 42 // Credential Provider Information. 43 // 44 typedef struct { 45 UINTN Count; 46 EFI_USER_CREDENTIAL2_PROTOCOL *Provider[1]; 47 } CREDENTIAL_PROVIDER_INFO; 48 49 // 50 // User profile information structure. 51 // 52 typedef struct { 53 UINT64 UsageCount; 54 EFI_TIME CreateDate; 55 EFI_TIME UsageDate; 56 UINTN AccessPolicyLen; 57 UINTN IdentityPolicyLen; 58 UINTN NewIdentityPolicyLen; 59 UINT8 *AccessPolicy; 60 UINT8 *IdentityPolicy; 61 UINT8 *NewIdentityPolicy; 62 CHAR16 UserName[USER_NAME_LENGTH]; 63 BOOLEAN CreateDateExist; 64 BOOLEAN UsageDateExist; 65 BOOLEAN AccessPolicyModified; 66 BOOLEAN IdentityPolicyModified; 67 BOOLEAN NewIdentityPolicyModified; 68 } USER_INFO; 69 70 // 71 // User access information structure. 72 // 73 typedef struct { 74 UINTN LoadPermitLen; 75 UINTN LoadForbidLen; 76 UINTN ConnectPermitLen; 77 UINTN ConnectForbidLen; 78 UINT8 *LoadPermit; 79 UINT8 *LoadForbid; 80 UINT8 *ConnectPermit; 81 UINT8 *ConnectForbid; 82 UINT32 AccessBootOrder; 83 UINT8 AccessRight; 84 UINT8 AccessSetup; 85 } USER_INFO_ACCESS; 86 87 #define USER_PROFILE_MANAGER_SIGNATURE SIGNATURE_32 ('U', 'P', 'M', 'S') 88 89 typedef struct { 90 UINTN Signature; 91 EFI_HANDLE DriverHandle; 92 EFI_HII_HANDLE HiiHandle; 93 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess; 94 } USER_PROFILE_MANAGER_CALLBACK_INFO; 95 96 // 97 // HII specific Vendor Device Path definition. 98 // 99 typedef struct { 100 VENDOR_DEVICE_PATH VendorDevicePath; 101 EFI_DEVICE_PATH_PROTOCOL End; 102 } HII_VENDOR_DEVICE_PATH; 103 104 // 105 // This is the generated IFR binary data for each formset defined in VFR. 106 // 107 extern UINT8 UserProfileManagerVfrBin[]; 108 109 // 110 // This is the generated String package data for .UNI file. 111 // 112 extern UINT8 UserProfileManagerStrings[]; 113 114 // 115 // The user manager protocol, used in several function. 116 // 117 extern EFI_USER_MANAGER_PROTOCOL *mUserManager; 118 119 // 120 // The credential providers database in system. 121 // 122 extern CREDENTIAL_PROVIDER_INFO *mProviderInfo; 123 124 // 125 // The variables used to update identity policy. 126 // 127 extern UINT8 mProviderChoice; 128 extern UINT8 mConncetLogical; 129 130 // 131 // The variables used to update access policy. 132 // 133 extern USER_INFO_ACCESS mAccessInfo; 134 135 // 136 // The user information used to record all data in UI. 137 // 138 extern USER_INFO mUserInfo; 139 140 extern USER_PROFILE_MANAGER_CALLBACK_INFO *mCallbackInfo; 141 142 extern EFI_USER_PROFILE_HANDLE mModifyUser; 143 144 /** 145 Get string by string id from HII Interface. 146 147 148 @param[in] Id String ID to get the string from. 149 150 @retval CHAR16 * String from ID. 151 @retval NULL If error occurs. 152 153 **/ 154 CHAR16 * 155 GetStringById ( 156 IN EFI_STRING_ID Id 157 ); 158 159 /** 160 Add a new user profile into the user profile database. 161 162 **/ 163 VOID 164 CallAddUser ( 165 VOID 166 ); 167 168 /** 169 Display user select form; can select a user to modify. 170 171 **/ 172 VOID 173 SelectUserToModify ( 174 VOID 175 ); 176 177 /** 178 Display user select form, cab select a user to delete. 179 180 **/ 181 VOID 182 SelectUserToDelete ( 183 VOID 184 ); 185 186 /** 187 Delete the user specified by UserIndex in user profile database. 188 189 @param[in] UserIndex The index of user in the user name list to be deleted. 190 191 **/ 192 VOID 193 DeleteUser ( 194 IN UINT8 UserIndex 195 ); 196 197 /** 198 Add a username item in form. 199 200 @param[in] User Points to the user profile whose username is added. 201 @param[in] Index The index of the user in the user name list. 202 @param[in] OpCodeHandle Points to container for dynamic created opcodes. 203 204 **/ 205 VOID 206 AddUserToForm ( 207 IN EFI_USER_PROFILE_HANDLE User, 208 IN UINT16 Index, 209 IN VOID *OpCodeHandle 210 ); 211 212 /** 213 Display modify user information form 214 215 In this form, username, create Date, usage date, usage count, identity policy, 216 and access policy are displayed. 217 218 @param[in] UserIndex The index of the user in display list to modify. 219 220 **/ 221 VOID 222 ModifyUserInfo ( 223 IN UINT8 UserIndex 224 ); 225 226 /** 227 Get the username from user input and update username string in Hii 228 database with it. 229 230 **/ 231 VOID 232 ModifyUserName ( 233 VOID 234 ); 235 236 /** 237 Display the form of modifying user identity policy. 238 239 **/ 240 VOID 241 ModifyIdentityPolicy ( 242 VOID 243 ); 244 245 /** 246 Update the mUserInfo.NewIdentityPolicy and UI when 'add option' is pressed. 247 248 **/ 249 VOID 250 AddIdentityPolicyItem ( 251 VOID 252 ); 253 254 /** 255 Save the identity policy and update UI with it. 256 257 This function will verify the new identity policy, in current implementation, 258 the identity policy can be: T, P & P & P & ..., P | P | P | ... 259 Here, "T" means "True", "P" means "Credential Provider", "&" means "and", "|" means "or". 260 Other identity policies are not supported. 261 262 **/ 263 VOID 264 SaveIdentityPolicy ( 265 VOID 266 ); 267 268 /** 269 Display modify user access policy form 270 271 In this form, access right, access setu,p and access boot order are dynamically 272 added. Load devicepath and connect devicepath are displayed too. 273 274 **/ 275 VOID 276 ModidyAccessPolicy ( 277 VOID 278 ); 279 280 /** 281 Collect all the access policy data to mUserInfo.AccessPolicy, 282 and save it to user profile. 283 284 **/ 285 VOID 286 SaveAccessPolicy ( 287 VOID 288 ); 289 290 /** 291 Get current user's access rights. 292 293 @param[out] AccessRight Points to the buffer used for user's access rights. 294 295 @retval EFI_SUCCESS Get current user access rights successfully. 296 @retval others Fail to get current user access rights. 297 298 **/ 299 EFI_STATUS 300 GetAccessRight ( 301 OUT UINT32 *AccessRight 302 ); 303 304 /** 305 Display the permit load device path in the loadable device path list. 306 307 **/ 308 VOID 309 DisplayLoadPermit( 310 VOID 311 ); 312 313 /** 314 Display the forbid load device path list (mAccessInfo.LoadForbid). 315 316 **/ 317 VOID 318 DisplayLoadForbid ( 319 VOID 320 ); 321 322 /** 323 Display the permit connect device path. 324 325 **/ 326 VOID 327 DisplayConnectPermit ( 328 VOID 329 ); 330 331 /** 332 Display the forbid connect device path list. 333 334 **/ 335 VOID 336 DisplayConnectForbid ( 337 VOID 338 ); 339 340 /** 341 Delete the specified device path by DriverIndex from the forbid device path 342 list (mAccessInfo.LoadForbid). 343 344 @param[in] DriverIndex The index of driver in a forbidden device path list. 345 346 **/ 347 VOID 348 DeleteFromForbidLoad ( 349 IN UINT16 DriverIndex 350 ); 351 352 /** 353 Add the specified device path by DriverIndex to the forbid device path 354 list (mAccessInfo.LoadForbid). 355 356 @param[in] DriverIndex The index of driver saved in driver options. 357 358 **/ 359 VOID 360 AddToForbidLoad ( 361 IN UINT16 DriverIndex 362 ); 363 364 /** 365 Get user name from the popup windows. 366 367 @param[in, out] UserNameLen On entry, point to the buffer lengh of UserName. 368 On exit, point to the input user name length. 369 @param[out] UserName The buffer to hold the input user name. 370 371 @retval EFI_ABORTED It is given up by pressing 'ESC' key. 372 @retval EFI_NOT_READY Not a valid input at all. 373 @retval EFI_SUCCESS Get a user name successfully. 374 375 **/ 376 EFI_STATUS 377 GetUserNameInput ( 378 IN OUT UINTN *UserNameLen, 379 OUT CHAR16 *UserName 380 ); 381 382 /** 383 Find the specified info in User profile by the InfoType. 384 385 @param[in] User Handle of the user whose information will be searched. 386 @param[in] InfoType The user information type to find. 387 @param[out] UserInfo Points to user information handle found. 388 389 @retval EFI_SUCCESS Find the user information successfully. 390 @retval Others Fail to find the user information. 391 392 **/ 393 EFI_STATUS 394 FindInfoByType ( 395 IN EFI_USER_PROFILE_HANDLE User, 396 IN UINT8 InfoType, 397 OUT EFI_USER_INFO_HANDLE *UserInfo 398 ); 399 400 /** 401 Convert the identity policy to a unicode string and update the Hii database 402 IpStringId string with it. 403 404 @param[in] Ip Points to identity policy. 405 @param[in] IpLen The identity policy length. 406 @param[in] IpStringId String ID in the HII database to be replaced. 407 408 **/ 409 VOID 410 ResolveIdentityPolicy ( 411 IN UINT8 *Ip, 412 IN UINTN IpLen, 413 IN EFI_STRING_ID IpStringId 414 ); 415 416 /** 417 Expand access policy memory size. 418 419 @param[in] ValidLen The valid access policy length. 420 @param[in] ExpandLen The length that is needed to expand. 421 422 **/ 423 VOID 424 ExpandMemory ( 425 IN UINTN ValidLen, 426 IN UINTN ExpandLen 427 ); 428 429 /** 430 Delete User's credental from all the providers that exist in User's identity policy. 431 432 @param[in] IdentityPolicy Point to User's identity policy. 433 @param[in] IdentityPolicyLen The length of the identity policy. 434 @param[in] User Points to user profile. 435 436 **/ 437 VOID 438 DeleteCredentialFromProviders ( 439 IN UINT8 *IdentityPolicy, 440 IN UINTN IdentityPolicyLen, 441 IN EFI_USER_PROFILE_HANDLE User 442 ); 443 444 #endif 445