/**@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;