mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 20:43:59 +00:00 
			
		
		
		
	 8f2a5f8012
			
		
	
	
		8f2a5f8012
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10436 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			560 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			560 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**@file
 | |
| 
 | |
| Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
 | |
| 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.             
 | |
| 
 | |
| 
 | |
| Module Name:
 | |
|   SecMain.h
 | |
| 
 | |
| Abstract:
 | |
|   Include file for Windows API based SEC
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <PiPei.h>
 | |
| #include <WinNtPeim.h>
 | |
| #include <Guid/StatusCodeDataTypeDebug.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/PeCoffLib.h>
 | |
| #include <Ppi/NtPeiLoadFile.h>
 | |
| #include <Ppi/NtAutoscan.h>
 | |
| #include <Ppi/NtThunk.h>
 | |
| #include <Ppi/StatusCode.h>
 | |
| #include <Ppi/NtFwh.h>
 | |
| #include <Ppi/TemporaryRamSupport.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/PrintLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/ReportStatusCodeLib.h>
 | |
| 
 | |
| #include <IndustryStandard/PeImage.h>
 | |
| 
 | |
| #define STACK_SIZE                0x20000      
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS  Address;
 | |
|   UINT64                Size;
 | |
| } NT_FD_INFO;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS  Memory;
 | |
|   UINT64                Size;
 | |
| } NT_SYSTEM_MEMORY;
 | |
| 
 | |
| #define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100
 | |
| 
 | |
| typedef struct {
 | |
|   CHAR8   *PdbPointer;
 | |
|   VOID    *ModHandle;
 | |
| } PDB_NAME_TO_MOD_HANDLE;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtPeiLoadFile (
 | |
|   VOID                  *Pe32Data,  // TODO: add IN/OUT modifier to Pe32Data
 | |
|   EFI_PHYSICAL_ADDRESS  *ImageAddress,  // TODO: add IN/OUT modifier to ImageAddress
 | |
|   UINT64                *ImageSize,  // TODO: add IN/OUT modifier to ImageSize
 | |
|   EFI_PHYSICAL_ADDRESS  *EntryPoint  // TODO: add IN/OUT modifier to EntryPoint
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Pe32Data      - TODO: add argument description
 | |
|   ImageAddress  - TODO: add argument description
 | |
|   ImageSize     - TODO: add argument description
 | |
|   EntryPoint    - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtPeiAutoScan (
 | |
|   IN  UINTN                 Index,
 | |
|   OUT EFI_PHYSICAL_ADDRESS  *MemoryBase,
 | |
|   OUT UINT64                *MemorySize
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Index       - TODO: add argument description
 | |
|   MemoryBase  - TODO: add argument description
 | |
|   MemorySize  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| VOID *
 | |
| EFIAPI
 | |
| SecWinNtWinNtThunkAddress (
 | |
|   VOID
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   InterfaceSize - TODO: add argument description
 | |
|   InterfaceBase - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtWinNtFwhAddress (
 | |
|   IN OUT UINT64                *FwhSize,
 | |
|   IN OUT EFI_PHYSICAL_ADDRESS  *FwhBase
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   FwhSize - TODO: add argument description
 | |
|   FwhBase - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecPeiReportStatusCode (
 | |
|   IN CONST EFI_PEI_SERVICES         **PeiServices,
 | |
|   IN EFI_STATUS_CODE_TYPE     CodeType,
 | |
|   IN EFI_STATUS_CODE_VALUE    Value,
 | |
|   IN UINT32                   Instance,
 | |
|   IN CONST EFI_GUID                 * CallerId,
 | |
|   IN CONST EFI_STATUS_CODE_DATA     * Data OPTIONAL
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   PeiServices - TODO: add argument description
 | |
|   CodeType    - TODO: add argument description
 | |
|   Value       - TODO: add argument description
 | |
|   Instance    - TODO: add argument description
 | |
|   CallerId    - TODO: add argument description
 | |
|   Data        - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| INTN
 | |
| EFIAPI
 | |
| main (
 | |
|   IN  INTN  Argc,
 | |
|   IN  CHAR8 **Argv,
 | |
|   IN  CHAR8 **Envp
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Argc  - TODO: add argument description
 | |
|   Argv  - TODO: add argument description
 | |
|   Envp  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| WinNtOpenFile (
 | |
|   CHAR16                *FileName,
 | |
|   UINT32                MapSize,
 | |
|   DWORD                 CreationDispostion,
 | |
|   EFI_PHYSICAL_ADDRESS  *BaseAddress,
 | |
|   UINT64                *Length
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   FileName            - TODO: add argument description
 | |
|   MapSize             - TODO: add argument description
 | |
|   CreationDispostion  - TODO: add argument description
 | |
|   BaseAddress         - TODO: add argument description
 | |
|   Length              - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| VOID
 | |
| SecLoadFromCore (
 | |
|   IN  UINTN   LargestRegion,
 | |
|   IN  UINTN   LargestRegionSize,
 | |
|   IN  UINTN   BootFirmwareVolumeBase,
 | |
|   IN  VOID    *PeiCoreFile
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   LargestRegion           - TODO: add argument description
 | |
|   LargestRegionSize       - TODO: add argument description
 | |
|   BootFirmwareVolumeBase  - TODO: add argument description
 | |
|   PeiCoreFile             - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| SecLoadFile (
 | |
|   IN  VOID                    *Pe32Data,
 | |
|   IN  EFI_PHYSICAL_ADDRESS    *ImageAddress,
 | |
|   IN  UINT64                  *ImageSize,
 | |
|   IN  EFI_PHYSICAL_ADDRESS    *EntryPoint
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Pe32Data      - TODO: add argument description
 | |
|   ImageAddress  - TODO: add argument description
 | |
|   ImageSize     - TODO: add argument description
 | |
|   EntryPoint    - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| SecFfsFindPeiCore (
 | |
|   IN  EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader,
 | |
|   OUT VOID                        **Pe32Data
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   FwVolHeader - TODO: add argument description
 | |
|   Pe32Data    - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| SecFfsFindNextFile (
 | |
|   IN EFI_FV_FILETYPE             SearchType,
 | |
|   IN EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader,
 | |
|   IN OUT EFI_FFS_FILE_HEADER     **FileHeader
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   SearchType  - TODO: add argument description
 | |
|   FwVolHeader - TODO: add argument description
 | |
|   FileHeader  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| SecFfsFindSectionData (
 | |
|   IN EFI_SECTION_TYPE      SectionType,
 | |
|   IN EFI_FFS_FILE_HEADER   *FfsFileHeader,
 | |
|   IN OUT VOID              **SectionData
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   SectionType   - TODO: add argument description
 | |
|   FfsFileHeader - TODO: add argument description
 | |
|   SectionData   - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtPeCoffLoaderLoadAsDll (
 | |
|   IN CHAR8    *PdbFileName,
 | |
|   IN VOID     **ImageEntryPoint,
 | |
|   OUT VOID    **ModHandle
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   PdbFileName     - TODO: add argument description
 | |
|   ImageEntryPoint - TODO: add argument description
 | |
|   ModHandle       - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtPeCoffLoaderFreeLibrary (
 | |
|   OUT VOID    *ModHandle
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   ModHandle - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecWinNtFdAddress (
 | |
|   IN     UINTN                 Index,
 | |
|   IN OUT EFI_PHYSICAL_ADDRESS  *FdBase,
 | |
|   IN OUT UINT64                *FdSize
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Index   - TODO: add argument description
 | |
|   FdBase  - TODO: add argument description
 | |
|   FdSize  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| GetImageReadFunction (
 | |
|   IN PE_COFF_LOADER_IMAGE_CONTEXT          *ImageContext,
 | |
|   IN EFI_PHYSICAL_ADDRESS                  *TopOfMemory
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   ImageContext  - TODO: add argument description
 | |
|   TopOfMemory   - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecImageRead (
 | |
|   IN     VOID    *FileHandle,
 | |
|   IN     UINTN   FileOffset,
 | |
|   IN OUT UINTN   *ReadSize,
 | |
|   OUT    VOID    *Buffer
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   FileHandle  - TODO: add argument description
 | |
|   FileOffset  - TODO: add argument description
 | |
|   ReadSize    - TODO: add argument description
 | |
|   Buffer      - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| CHAR16                            *
 | |
| AsciiToUnicode (
 | |
|   IN  CHAR8   *Ascii,
 | |
|   IN  UINTN   *StrLen OPTIONAL
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Ascii   - TODO: add argument description
 | |
|   StrLen  - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| UINTN
 | |
| CountSeperatorsInString (
 | |
|   IN  CONST CHAR16   *String,
 | |
|   IN  CHAR16   Seperator
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   TODO: Add function description
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   String    - TODO: add argument description
 | |
|   Seperator - TODO: add argument description
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   TODO: add return values
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecTemporaryRamSupport (
 | |
|   IN CONST EFI_PEI_SERVICES   **PeiServices,
 | |
|   IN EFI_PHYSICAL_ADDRESS     TemporaryMemoryBase,
 | |
|   IN EFI_PHYSICAL_ADDRESS     PermanentMemoryBase,
 | |
|   IN UINTN                    CopySize
 | |
|   );
 | |
| 
 | |
| 
 | |
| extern EFI_WIN_NT_THUNK_PROTOCOL  *gWinNt;
 |