mirror of https://github.com/acidanthera/audk.git
retain gEfiLoadPeImageProtocolGuid, and only published by DxeCore to keep backward compatibility.
Native EDKII module should not use such protocol to load image git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8110 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
0f2685219d
commit
023c0fec45
|
@ -39,6 +39,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Protocol/MonotonicCounter.h>
|
||||
#include <Protocol/StatusCode.h>
|
||||
#include <Protocol/Decompress.h>
|
||||
#include <Protocol/LoadPe32Image.h>
|
||||
#include <Protocol/Security.h>
|
||||
#include <Protocol/Ebc.h>
|
||||
#include <Protocol/Reset.h>
|
||||
|
|
|
@ -107,6 +107,7 @@
|
|||
gEfiStatusCodeRuntimeProtocolGuid ## SOMETIMES_CONSUMES
|
||||
gEfiCapsuleArchProtocolGuid ## CONSUMES
|
||||
gEfiDecompressProtocolGuid ## CONSUMES
|
||||
gEfiLoadPeImageProtocolGuid ## PRODUCES
|
||||
gEfiSimpleFileSystemProtocolGuid ## CONSUMES
|
||||
gEfiLoadFileProtocolGuid ## CONSUMES
|
||||
gEfiLoadFile2ProtocolGuid ## CONSUMES
|
||||
|
|
|
@ -15,15 +15,20 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include "DxeMain.h"
|
||||
#include "Image.h"
|
||||
|
||||
#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
|
||||
|
||||
//
|
||||
// Module Globals
|
||||
//
|
||||
LOADED_IMAGE_PRIVATE_DATA *mCurrentImage = NULL;
|
||||
|
||||
LOAD_PE32_IMAGE_PRIVATE_DATA mLoadPe32PrivateData = {
|
||||
LOAD_PE32_IMAGE_PRIVATE_DATA_SIGNATURE,
|
||||
NULL,
|
||||
{
|
||||
CoreLoadImageEx,
|
||||
CoreUnloadImageEx
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// This code is needed to build the Image handle for the DXE Core
|
||||
|
@ -142,7 +147,12 @@ CoreInitializeImageServices (
|
|||
//
|
||||
// Export DXE Core PE Loader functionality
|
||||
//
|
||||
return EFI_SUCCESS;
|
||||
return CoreInstallProtocolInterface (
|
||||
&mLoadPe32PrivateData.Handle,
|
||||
&gEfiLoadPeImageProtocolGuid,
|
||||
EFI_NATIVE_INTERFACE,
|
||||
&mLoadPe32PrivateData.Pe32Image
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
@ -990,6 +1000,66 @@ CoreLoadImage (
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
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.
|
||||
|
||||
**/
|
||||
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
|
||||
)
|
||||
{
|
||||
return CoreLoadImageCommon (
|
||||
TRUE,
|
||||
ParentImageHandle,
|
||||
FilePath,
|
||||
SourceBuffer,
|
||||
SourceSize,
|
||||
DstBuffer,
|
||||
NumberOfPages,
|
||||
ImageHandle,
|
||||
EntryPoint,
|
||||
Attribute
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Transfer control to a loaded image's entry point.
|
||||
|
||||
|
@ -1310,3 +1380,25 @@ Done:
|
|||
return Status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
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
|
||||
)
|
||||
{
|
||||
return CoreUnloadImage (ImageHandle);
|
||||
}
|
||||
|
|
|
@ -65,6 +65,19 @@ typedef struct {
|
|||
CR(a, LOADED_IMAGE_PRIVATE_DATA, Info, LOADED_IMAGE_PRIVATE_DATA_SIGNATURE)
|
||||
|
||||
|
||||
#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
|
||||
//
|
||||
|
@ -137,5 +150,66 @@ CoreReadImageFile (
|
|||
);
|
||||
|
||||
|
||||
/**
|
||||
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.
|
||||
|
||||
**/
|
||||
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
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
/** @file
|
||||
|
||||
Load Pe32 Image protocol provides capability to load and unload EFI image into memory and execute it.
|
||||
This protocol bases on File Device Path to get EFI image.
|
||||
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. 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 __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 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 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 memory resources.
|
||||
**/
|
||||
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,
|
||||
OUT UINTN *NumberOfPages OPTIONAL,
|
||||
OUT EFI_HANDLE *ImageHandle,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EntryPoint OPTIONAL,
|
||||
IN UINT32 Attribute
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
Unload the specified image.
|
||||
|
||||
@param This 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 Attempt to unload an unsupported image.
|
||||
@retval EFI_SUCCESS Image is 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
|
||||
|
|
@ -142,6 +142,12 @@
|
|||
gEfiCrc32GuidedSectionExtractionGuid = { 0xFC1BCDB0, 0x7D31, 0x49aa, {0x93, 0x6A, 0xA4, 0x60, 0x0D, 0x9D, 0xD0, 0x83 } }
|
||||
|
||||
[Protocols.common]
|
||||
## Load File protocol provides capability to load and unload EFI image into memory and execute it.
|
||||
## Include/Protocol/LoadPe32Image.h
|
||||
## This protocol is deprecated. Native EDKII module should NOT use this protocol to load/unload image.
|
||||
## If developer need implement such functionality, they should use BasePeCoffLib.
|
||||
gEfiLoadPeImageProtocolGuid = { 0x5CB5C776, 0x60D5, 0x45EE, { 0x88, 0x3C, 0x45, 0x27, 0x08, 0xCD, 0x74, 0x3F }}
|
||||
|
||||
## Print protocol defines six basic print functions to print the format unicode and ascii string.
|
||||
## Include/Protocol/Print2.h
|
||||
gEfiPrint2ProtocolGuid = { 0x5bcc3dbc, 0x8c57, 0x450a, { 0xbb, 0x0c, 0xa1, 0xc0, 0xbd, 0xde, 0x48, 0x0c }}
|
||||
|
|
Loading…
Reference in New Issue