/** @file | |
Implement defer image load services for user identification in UEFI2.2. | |
Copyright (c) 2016, 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 _DEFER_3RD_PARTY_IMAGE_LOAD_H_ | |
#define _DEFER_3RD_PARTY_IMAGE_LOAD_H_ | |
#include <PiDxe.h> | |
#include <Guid/EventGroup.h> | |
#include <Protocol/DeferredImageLoad.h> | |
#include <Protocol/FirmwareVolume2.h> | |
#include <Protocol/DxeSmmReadyToLock.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/ReportStatusCodeLib.h> | |
/** | |
Returns information about a deferred image. | |
This function returns information about a single deferred image. The deferred images are | |
numbered consecutively, starting with 0. If there is no image which corresponds to | |
ImageIndex, then EFI_NOT_FOUND is returned. All deferred images may be returned by | |
iteratively calling this function until EFI_NOT_FOUND is returned. | |
Image may be NULL and ImageSize set to 0 if the decision to defer execution was made | |
because of the location of the executable image, rather than its actual contents. | |
@param[in] This Points to this instance of the EFI_DEFERRED_IMAGE_LOAD_PROTOCOL. | |
@param[in] ImageIndex Zero-based index of the deferred index. | |
@param[out] ImageDevicePath On return, points to a pointer to the device path of the image. | |
The device path should not be freed by the caller. | |
@param[out] Image On return, points to the first byte of the image or NULL if the | |
image is not available. The image should not be freed by the caller | |
unless LoadImage() has been successfully called. | |
@param[out] ImageSize On return, the size of the image, or 0 if the image is not available. | |
@param[out] BootOption On return, points to TRUE if the image was intended as a boot option | |
or FALSE if it was not intended as a boot option. | |
@retval EFI_SUCCESS Image information returned successfully. | |
@retval EFI_NOT_FOUND ImageIndex does not refer to a valid image. | |
@retval EFI_INVALID_PARAMETER ImageDevicePath is NULL or Image is NULL or ImageSize is NULL or | |
BootOption is NULL. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GetDefferedImageInfo ( | |
IN EFI_DEFERRED_IMAGE_LOAD_PROTOCOL *This, | |
IN UINTN ImageIndex, | |
OUT EFI_DEVICE_PATH_PROTOCOL **ImageDevicePath, | |
OUT VOID **Image, | |
OUT UINTN *ImageSize, | |
OUT BOOLEAN *BootOption | |
); | |
/** | |
Defer the 3rd party image load and installs Deferred Image Load Protocol. | |
@param[in] File This is a pointer to the device path of the file that | |
is being dispatched. This will optionally be used for | |
logging. | |
@param[in] BootPolicy A boot policy that was used to call LoadImage() UEFI service. | |
@retval EFI_SUCCESS The file is not 3rd party image and can be loaded immediately. | |
@retval EFI_ACCESS_DENIED The file is 3rd party image and needs deferred. | |
**/ | |
EFI_STATUS | |
Defer3rdPartyImageLoad ( | |
IN CONST EFI_DEVICE_PATH_PROTOCOL *File, | |
IN BOOLEAN BootPolicy | |
); | |
/** | |
Installs DeferredImageLoad Protocol and listens EndOfDxe event. | |
**/ | |
VOID | |
Defer3rdPartyImageLoadInitialize ( | |
VOID | |
); | |
#endif |