2007-01-06 15:59:06 +01:00
|
|
|
/*++
|
|
|
|
|
|
|
|
Copyright (c) 2006, 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.
|
|
|
|
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
SecMain.h
|
|
|
|
|
|
|
|
Abstract:
|
2007-01-07 20:31:19 +01:00
|
|
|
Include file for host API based SEC
|
2007-01-06 15:59:06 +01:00
|
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
|
|
#define STACK_SIZE 0x20000
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
EFI_PHYSICAL_ADDRESS Address;
|
|
|
|
UINT64 Size;
|
|
|
|
} UNIX_FD_INFO;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
EFI_PHYSICAL_ADDRESS Memory;
|
|
|
|
UINT64 Size;
|
|
|
|
} UNIX_SYSTEM_MEMORY;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 EFI_PEI_SERVICES **PeiServices,
|
|
|
|
IN EFI_STATUS_CODE_TYPE CodeType,
|
|
|
|
IN EFI_STATUS_CODE_VALUE Value,
|
|
|
|
IN UINT32 Instance,
|
|
|
|
IN EFI_GUID * CallerId,
|
|
|
|
IN 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
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
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
|
|
|
|
SecNt32PeCoffGetImageInfo (
|
|
|
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
|
|
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SecNt32PeCoffLoadImage (
|
|
|
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
|
|
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SecNt32PeCoffRelocateImage (
|
|
|
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
|
|
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SecNt32PeCoffUnloadimage (
|
|
|
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
|
|
|
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
EFI_PEI_PE_COFF_LOADER_PROTOCOL PeCoff;
|
|
|
|
VOID *ModHandle;
|
|
|
|
} EFI_PEI_PE_COFF_LOADER_PROTOCOL_INSTANCE;
|
|
|
|
|
|
|
|
extern EFI_UNIX_THUNK_PROTOCOL *gUnix;
|