2008-03-19 04:23:16 +01:00
|
|
|
/**@file
|
2007-07-03 11:18:19 +02:00
|
|
|
|
2010-04-28 14:24:39 +02:00
|
|
|
Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
|
2019-04-04 01:06:18 +02:00
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
2007-07-03 11:18:19 +02:00
|
|
|
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
SecMain.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
Include file for Windows API based SEC
|
|
|
|
|
2008-03-19 04:23:16 +01:00
|
|
|
**/
|
2007-07-03 11:18:19 +02:00
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <PiPei.h>
|
|
|
|
#include <WinNtPeim.h>
|
2009-06-07 03:14:53 +02:00
|
|
|
#include <Guid/StatusCodeDataTypeDebug.h>
|
2007-07-03 11:18:19 +02:00
|
|
|
#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>
|
2008-02-29 19:24:43 +01:00
|
|
|
#include <Ppi/TemporaryRamSupport.h>
|
2007-07-03 11:18:19 +02:00
|
|
|
#include <Library/PcdLib.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
|
|
#include <Library/PrintLib.h>
|
|
|
|
#include <Library/BaseMemoryLib.h>
|
2007-07-27 18:55:19 +02:00
|
|
|
#include <Library/ReportStatusCodeLib.h>
|
|
|
|
|
|
|
|
#include <IndustryStandard/PeImage.h>
|
|
|
|
|
2007-07-03 11:18:19 +02:00
|
|
|
#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 (
|
2007-09-04 08:10:44 +02:00
|
|
|
IN CONST EFI_PEI_SERVICES **PeiServices,
|
2007-07-03 11:18:19 +02:00
|
|
|
IN EFI_STATUS_CODE_TYPE CodeType,
|
|
|
|
IN EFI_STATUS_CODE_VALUE Value,
|
|
|
|
IN UINT32 Instance,
|
2007-09-04 08:10:44 +02:00
|
|
|
IN CONST EFI_GUID * CallerId,
|
|
|
|
IN CONST EFI_STATUS_CODE_DATA * Data OPTIONAL
|
2007-07-03 11:18:19 +02:00
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
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
|
2016-10-19 09:01:29 +02:00
|
|
|
CountSeparatorsInString (
|
2008-10-14 19:32:18 +02:00
|
|
|
IN CONST CHAR16 *String,
|
2016-10-19 09:01:29 +02:00
|
|
|
IN CHAR16 Separator
|
2007-07-03 11:18:19 +02:00
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
String - TODO: add argument description
|
2016-10-19 09:01:29 +02:00
|
|
|
Separator - TODO: add argument description
|
2007-07-03 11:18:19 +02:00
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
2008-02-29 19:24:43 +01:00
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
SecTemporaryRamSupport (
|
|
|
|
IN CONST EFI_PEI_SERVICES **PeiServices,
|
|
|
|
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
|
|
|
|
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
|
|
|
|
IN UINTN CopySize
|
|
|
|
);
|
2007-07-03 11:18:19 +02:00
|
|
|
|
|
|
|
|
|
|
|
extern EFI_WIN_NT_THUNK_PROTOCOL *gWinNt;
|