| /** @file | |
| Load Pe32 Image protocol enables loading and unloading EFI images into memory and executing those images. | |
| This protocol uses File Device Path to get an EFI image. | |
| Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __LOAD_PE32_IMAGE_H__ | |
| #define __LOAD_PE32_IMAGE_H__ | |
| #define PE32_IMAGE_PROTOCOL_GUID \ | |
| {0x5cb5c776,0x60d5,0x45ee,{0x88,0x3c,0x45,0x27,0x8,0xcd,0x74,0x3f }} | |
| #define EFI_LOAD_PE_IMAGE_ATTRIBUTE_NONE 0x00 | |
| #define EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION 0x01 | |
| #define EFI_LOAD_PE_IMAGE_ATTRIBUTE_DEBUG_IMAGE_INFO_TABLE_REGISTRATION 0x02 | |
| typedef struct _EFI_PE32_IMAGE_PROTOCOL EFI_PE32_IMAGE_PROTOCOL; | |
| /** | |
| Loads an EFI image into memory and returns a handle to the image with extended parameters. | |
| @param This The pointer to the LoadPe32Image protocol instance | |
| @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 The image handle for output. | |
| @param EntryPoint The 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 The image was not loaded due to insufficient memory 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. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *LOAD_PE_IMAGE)( | |
| 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, | |
| IN OUT UINTN *NumberOfPages OPTIONAL, | |
| OUT EFI_HANDLE *ImageHandle, | |
| OUT EFI_PHYSICAL_ADDRESS *EntryPoint OPTIONAL, | |
| IN UINT32 Attribute | |
| ); | |
| /** | |
| Unload the specified image. | |
| @param This The pointer to the LoadPe32Image protocol instance | |
| @param ImageHandle The specified image handle to be unloaded. | |
| @retval EFI_INVALID_PARAMETER Image handle is NULL. | |
| @retval EFI_UNSUPPORTED Attempted to unload an unsupported image. | |
| @retval EFI_SUCCESS The image successfully unloaded. | |
| --*/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *UNLOAD_PE_IMAGE)( | |
| IN EFI_PE32_IMAGE_PROTOCOL *This, | |
| IN EFI_HANDLE ImageHandle | |
| ); | |
| struct _EFI_PE32_IMAGE_PROTOCOL { | |
| LOAD_PE_IMAGE LoadPeImage; | |
| UNLOAD_PE_IMAGE UnLoadPeImage; | |
| }; | |
| extern EFI_GUID gEfiLoadPeImageProtocolGuid; | |
| #endif |