Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2 
      3   Load Pe32 Image protocol enables loading and unloading EFI images into memory and executing those images.
      4   This protocol uses File Device Path to get an EFI image.
      5 
      6 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
      7 This program and the accompanying materials are licensed and made available under
      8 the terms and conditions of the BSD License that accompanies this distribution.
      9 The full text of the license may be found at
     10 http://opensource.org/licenses/bsd-license.php.
     11 
     12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 **/
     16 
     17 #ifndef __LOAD_PE32_IMAGE_H__
     18 #define __LOAD_PE32_IMAGE_H__
     19 
     20 #define PE32_IMAGE_PROTOCOL_GUID  \
     21   {0x5cb5c776,0x60d5,0x45ee,{0x88,0x3c,0x45,0x27,0x8,0xcd,0x74,0x3f }}
     22 
     23 #define EFI_LOAD_PE_IMAGE_ATTRIBUTE_NONE                                 0x00
     24 #define EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION                 0x01
     25 #define EFI_LOAD_PE_IMAGE_ATTRIBUTE_DEBUG_IMAGE_INFO_TABLE_REGISTRATION  0x02
     26 
     27 typedef struct _EFI_PE32_IMAGE_PROTOCOL   EFI_PE32_IMAGE_PROTOCOL;
     28 
     29 /**
     30 
     31   Loads an EFI image into memory and returns a handle to the image with extended parameters.
     32 
     33   @param  This                The pointer to the LoadPe32Image protocol instance
     34   @param  ParentImageHandle   The caller's image handle.
     35   @param  FilePath            The specific file path from which the image is loaded.
     36   @param  SourceBuffer        If not NULL, a pointer to the memory location containing a copy of
     37                               the image to be loaded.
     38   @param  SourceSize          The size in bytes of SourceBuffer.
     39   @param  DstBuffer           The buffer to store the image.
     40   @param  NumberOfPages       For input, specifies the space size of the image by caller if not NULL.
     41                               For output, specifies the actual space size needed.
     42   @param  ImageHandle         The image handle for output.
     43   @param  EntryPoint          The image entry point for output.
     44   @param  Attribute           The bit mask of attributes to set for the load PE image.
     45 
     46   @retval EFI_SUCCESS           The image was loaded into memory.
     47   @retval EFI_NOT_FOUND         The FilePath was not found.
     48   @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
     49   @retval EFI_UNSUPPORTED       The image type is not supported, or the device path cannot be
     50                                 parsed to locate the proper protocol for loading the file.
     51   @retval EFI_OUT_OF_RESOURCES  The image was not loaded due to insufficient memory resources.
     52   @retval EFI_LOAD_ERROR        Image was not loaded because the image format was corrupt or not
     53                                 understood.
     54   @retval EFI_DEVICE_ERROR      Image was not loaded because the device returned a read error.
     55   @retval EFI_ACCESS_DENIED     Image was not loaded because the platform policy prohibits the
     56                                 image from being loaded. NULL is returned in *ImageHandle.
     57   @retval EFI_SECURITY_VIOLATION Image was loaded and an ImageHandle was created with a
     58                                 valid EFI_LOADED_IMAGE_PROTOCOL. However, the current
     59                                 platform policy specifies that the image should not be started.
     60 **/
     61 typedef
     62 EFI_STATUS
     63 (EFIAPI *LOAD_PE_IMAGE)(
     64   IN EFI_PE32_IMAGE_PROTOCOL           *This,
     65   IN  EFI_HANDLE                       ParentImageHandle,
     66   IN  EFI_DEVICE_PATH_PROTOCOL         *FilePath,
     67   IN  VOID                             *SourceBuffer       OPTIONAL,
     68   IN  UINTN                            SourceSize,
     69   IN  EFI_PHYSICAL_ADDRESS             DstBuffer           OPTIONAL,
     70   IN OUT UINTN                         *NumberOfPages      OPTIONAL,
     71   OUT EFI_HANDLE                       *ImageHandle,
     72   OUT EFI_PHYSICAL_ADDRESS             *EntryPoint         OPTIONAL,
     73   IN  UINT32                           Attribute
     74   );
     75 
     76 /**
     77 
     78   Unload the specified image.
     79 
     80   @param  This             The pointer to the LoadPe32Image protocol instance
     81   @param  ImageHandle      The specified image handle to be unloaded.
     82 
     83   @retval EFI_INVALID_PARAMETER Image handle is NULL.
     84   @retval EFI_UNSUPPORTED       Attempted to unload an unsupported image.
     85   @retval EFI_SUCCESS           The image successfully unloaded.
     86 
     87 --*/
     88 typedef
     89 EFI_STATUS
     90 (EFIAPI *UNLOAD_PE_IMAGE)(
     91   IN EFI_PE32_IMAGE_PROTOCOL          *This,
     92   IN EFI_HANDLE                       ImageHandle
     93   );
     94 
     95 struct _EFI_PE32_IMAGE_PROTOCOL {
     96   LOAD_PE_IMAGE     LoadPeImage;
     97   UNLOAD_PE_IMAGE   UnLoadPeImage;
     98 };
     99 
    100 extern EFI_GUID gEfiLoadPeImageProtocolGuid;
    101 
    102 #endif
    103 
    104