audk/Nt32Pkg/Sec/SecMain.h

590 lines
11 KiB
C

/*++
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:
Include file for Windows API based SEC
--*/
#include <stdio.h>
#include <Base.h>
#include <PiPei.h>
#include <PiDxe.h>
#include <WinNtPeim.h>
#include <Library/BaseLib.h>
#include <Library/PeCoffLib.h>
#include <Guid/PeiPeCoffLoader.h>
#include <Ppi/NtPeiLoadFile.h>
#include <Ppi/NtAutoscan.h>
#include <Ppi/NtThunk.h>
#include <Ppi/StatusCode.h>
#include <Ppi/NtFwh.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;
#define NT_SYSTEM_MEMORY_FILENAME_SIZE 40
typedef struct {
CHAR16 FileName[NT_SYSTEM_MEMORY_FILENAME_SIZE];
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
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_WIN_NT_THUNK_PROTOCOL *gWinNt;