/** @file Data structure and functions to load and unload PeImage. Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _IMAGE_H_ #define _IMAGE_H_ #define LOAD_PE32_IMAGE_PRIVATE_DATA_SIGNATURE SIGNATURE_32('l','p','e','i') typedef struct { UINTN Signature; /// Image handle EFI_HANDLE Handle; EFI_PE32_IMAGE_PROTOCOL Pe32Image; } LOAD_PE32_IMAGE_PRIVATE_DATA; #define LOAD_PE32_IMAGE_PRIVATE_DATA_FROM_THIS(a) \ CR(a, LOAD_PE32_IMAGE_PRIVATE_DATA, Pe32Image, LOAD_PE32_IMAGE_PRIVATE_DATA_SIGNATURE) // // Private Data Types // #define IMAGE_FILE_HANDLE_SIGNATURE SIGNATURE_32('i','m','g','f') typedef struct { UINTN Signature; BOOLEAN FreeBuffer; VOID *Source; UINTN SourceSize; } IMAGE_FILE_HANDLE; /** Loads an EFI image into memory and returns a handle to the image with extended parameters. @param This Calling context @param ParentImageHandle The caller's image handle. @param FilePath The specific file path from which the image is loaded. @param SourceBuffer If not NULL, a pointer to the memory location containing a copy of the image to be loaded. @param SourceSize The size in bytes of SourceBuffer. @param DstBuffer The buffer to store the image. @param NumberOfPages For input, specifies the space size of the image by caller if not NULL. For output, specifies the actual space size needed. @param ImageHandle Image handle for output. @param EntryPoint Image entry point for output. @param Attribute The bit mask of attributes to set for the load PE image. @retval EFI_SUCCESS The image was loaded into memory. @retval EFI_NOT_FOUND The FilePath was not found. @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. @retval EFI_UNSUPPORTED The image type is not supported, or the device path cannot be parsed to locate the proper protocol for loading the file. @retval EFI_OUT_OF_RESOURCES Image was not loaded due to insufficient resources. @retval EFI_LOAD_ERROR Image was not loaded because the image format was corrupt or not understood. @retval EFI_DEVICE_ERROR Image was not loaded because the device returned a read error. @retval EFI_ACCESS_DENIED Image was not loaded because the platform policy prohibits the image from being loaded. NULL is returned in *ImageHandle. @retval EFI_SECURITY_VIOLATION Image was loaded and an ImageHandle was created with a valid EFI_LOADED_IMAGE_PROTOCOL. However, the current platform policy specifies that the image should not be started. **/ EFI_STATUS EFIAPI CoreLoadImageEx ( IN EFI_PE32_IMAGE_PROTOCOL *This, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *FilePath, IN VOID *SourceBuffer OPTIONAL, IN UINTN SourceSize, IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL, OUT UINTN *NumberOfPages OPTIONAL, OUT EFI_HANDLE *ImageHandle, OUT EFI_PHYSICAL_ADDRESS *EntryPoint OPTIONAL, IN UINT32 Attribute ); /** Unload the specified image. @param This Indicates the calling context. @param ImageHandle The specified image handle. @retval EFI_INVALID_PARAMETER Image handle is NULL. @retval EFI_UNSUPPORTED Attempt to unload an unsupported image. @retval EFI_SUCCESS Image successfully unloaded. **/ EFI_STATUS EFIAPI CoreUnloadImageEx ( IN EFI_PE32_IMAGE_PROTOCOL *This, IN EFI_HANDLE ImageHandle ); #endif