| /** @file | |
| The PRM PE/COFF library provides functionality to support additional PE/COFF functionality needed to use | |
| Platform Runtime Mechanism (PRM) modules. | |
| Copyright (c) Microsoft Corporation | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef PRM_PECOFF_LIB_H_ | |
| #define PRM_PECOFF_LIB_H_ | |
| #include <Base.h> | |
| #include <PrmExportDescriptor.h> | |
| #include <IndustryStandard/PeImage.h> | |
| #include <Library/PeCoffLib.h> | |
| /** | |
| Gets a pointer to the export directory in a given PE/COFF image. | |
| @param[in] ImageExportDirectory A pointer to an export directory table in a PE/COFF image. | |
| @param[in] PeCoffLoaderImageContext A pointer to a PE_COFF_LOADER_IMAGE_CONTEXT structure that contains the | |
| PE/COFF image context for the Image containing the PRM Module Export | |
| Descriptor table. | |
| @param[out] ExportDescriptor A pointer to a pointer to the PRM Module Export Descriptor table found | |
| in the ImageExportDirectory given. | |
| @retval EFI_SUCCESS The PRM Module Export Descriptor table was found successfully. | |
| @retval EFI_INVALID_PARAMETER A required parameter is NULL. | |
| @retval EFI_NOT_FOUND The PRM Module Export Descriptor table was not found in the given | |
| ImageExportDirectory. | |
| **/ | |
| EFI_STATUS | |
| GetPrmModuleExportDescriptorTable ( | |
| IN EFI_IMAGE_EXPORT_DIRECTORY *ImageExportDirectory, | |
| IN PE_COFF_LOADER_IMAGE_CONTEXT *PeCoffLoaderImageContext, | |
| OUT PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT **ExportDescriptor | |
| ); | |
| /** | |
| Gets a pointer to the export directory in a given PE/COFF image. | |
| @param[in] Image A pointer to a PE32/COFF image base address that is loaded into memory | |
| and already relocated to the memory base address. RVAs in the image given | |
| should be valid. | |
| @param[in] PeCoffLoaderImageContext A pointer to a PE_COFF_LOADER_IMAGE_CONTEXT structure that contains the | |
| PE/COFF image context for the Image given. | |
| @param[out] ImageExportDirectory A pointer to a pointer to the export directory found in the Image given. | |
| @retval EFI_SUCCESS The export directory was found successfully. | |
| @retval EFI_INVALID_PARAMETER A required parameter is NULL. | |
| @retval EFI_UNSUPPORTED The PE/COFF image given is not supported as a PRM Module. | |
| @retval EFI_NOT_FOUND The image export directory could not be found for this image. | |
| **/ | |
| EFI_STATUS | |
| GetExportDirectoryInPeCoffImage ( | |
| IN VOID *Image, | |
| IN PE_COFF_LOADER_IMAGE_CONTEXT *PeCoffLoaderImageContext, | |
| OUT EFI_IMAGE_EXPORT_DIRECTORY **ImageExportDirectory | |
| ); | |
| /** | |
| Returns the image major and image minor version in a given PE/COFF image. | |
| @param[in] Image A pointer to a PE32/COFF image base address that is loaded into memory | |
| and already relocated to the memory base address. RVAs in the image given | |
| should be valid. | |
| @param[in] PeCoffLoaderImageContext A pointer to a PE_COFF_LOADER_IMAGE_CONTEXT structure that contains the | |
| PE/COFF image context for the Image given. | |
| @param[out] ImageMajorVersion A pointer to a UINT16 buffer to hold the image major version. | |
| @param[out] ImageMinorVersion A pointer to a UINT16 buffer to hold the image minor version. | |
| @retval EFI_SUCCESS The image version was read successfully. | |
| @retval EFI_INVALID_PARAMETER A required parameter is NULL. | |
| @retval EFI_UNSUPPORTED The PE/COFF image given is not supported. | |
| **/ | |
| EFI_STATUS | |
| GetImageVersionInPeCoffImage ( | |
| IN VOID *Image, | |
| IN PE_COFF_LOADER_IMAGE_CONTEXT *PeCoffLoaderImageContext, | |
| OUT UINT16 *ImageMajorVersion, | |
| OUT UINT16 *ImageMinorVersion | |
| ); | |
| /** | |
| Gets the address of an entry in an image export table by ASCII name. | |
| @param[in] ExportName A pointer to an ASCII name string of the entry name. | |
| @param[in] ImageBaseAddress The base address of the PE/COFF image. | |
| @param[in] ImageExportDirectory A pointer to the export directory in the image. | |
| @param[out] ExportPhysicalAddress A pointer that will be updated with the address of the address of the | |
| export entry if found. | |
| @retval EFI_SUCCESS The export entry was found successfully. | |
| @retval EFI_INVALID_PARAMETER A required pointer argument is NULL. | |
| @retval EFI_NOT_FOUND An entry with the given ExportName was not found. | |
| **/ | |
| EFI_STATUS | |
| GetExportEntryAddress ( | |
| IN CONST CHAR8 *ExportName, | |
| IN EFI_PHYSICAL_ADDRESS ImageBaseAddress, | |
| IN EFI_IMAGE_EXPORT_DIRECTORY *ImageExportDirectory, | |
| OUT EFI_PHYSICAL_ADDRESS *ExportPhysicalAddress | |
| ); | |
| #endif |