From ca6850ea2728a09559575038eac371c41c7c39af Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Thu, 27 Apr 2017 11:36:34 +0800 Subject: Nt32Pkg: Remove unused Package Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- Nt32Pkg/Sec/FwVol.c | 314 ------------- Nt32Pkg/Sec/SecMain.c | 1136 ---------------------------------------------- Nt32Pkg/Sec/SecMain.h | 559 ----------------------- Nt32Pkg/Sec/SecMain.inf | 90 ---- Nt32Pkg/Sec/Stack.asm | 94 ---- Nt32Pkg/Sec/StackX64.asm | 110 ----- Nt32Pkg/Sec/WinNtThunk.c | 187 -------- 7 files changed, 2490 deletions(-) delete mode 100644 Nt32Pkg/Sec/FwVol.c delete mode 100644 Nt32Pkg/Sec/SecMain.c delete mode 100644 Nt32Pkg/Sec/SecMain.h delete mode 100644 Nt32Pkg/Sec/SecMain.inf delete mode 100644 Nt32Pkg/Sec/Stack.asm delete mode 100644 Nt32Pkg/Sec/StackX64.asm delete mode 100644 Nt32Pkg/Sec/WinNtThunk.c (limited to 'Nt32Pkg/Sec') diff --git a/Nt32Pkg/Sec/FwVol.c b/Nt32Pkg/Sec/FwVol.c deleted file mode 100644 index f476fa99c7..0000000000 --- a/Nt32Pkg/Sec/FwVol.c +++ /dev/null @@ -1,314 +0,0 @@ -/**@file - -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: - FwVol.c - -Abstract: - A simple FV stack so the SEC can extract the SEC Core from an - FV. - -**/ - -#include "SecMain.h" - -#define GET_OCCUPIED_SIZE(ActualSize, Alignment) \ - (ActualSize) + (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1)) - -EFI_FFS_FILE_STATE -GetFileState ( - IN UINT8 ErasePolarity, - IN EFI_FFS_FILE_HEADER *FfsHeader - ) -/*++ - -Routine Description: - Returns the highest bit set of the State field - -Arguments: - ErasePolarity - Erase Polarity as defined by EFI_FVB_ERASE_POLARITY - in the Attributes field. - FfsHeader - Pointer to FFS File Header. - -Returns: - Returns the highest bit in the State field - ---*/ -{ - EFI_FFS_FILE_STATE FileState; - EFI_FFS_FILE_STATE HighestBit; - - FileState = FfsHeader->State; - - if (ErasePolarity != 0) { - FileState = (EFI_FFS_FILE_STATE)~FileState; - } - - HighestBit = 0x80; - while (HighestBit != 0 && (HighestBit & FileState) == 0) { - HighestBit >>= 1; - } - - return HighestBit; -} - -UINT8 -CalculateHeaderChecksum ( - IN EFI_FFS_FILE_HEADER *FileHeader - ) -/*++ - -Routine Description: - Calculates the checksum of the header of a file. - -Arguments: - FileHeader - Pointer to FFS File Header. - -Returns: - Checksum of the header. - ---*/ -{ - UINT8 *ptr; - UINTN Index; - UINT8 Sum; - - Sum = 0; - ptr = (UINT8 *) FileHeader; - - for (Index = 0; Index < sizeof (EFI_FFS_FILE_HEADER) - 3; Index += 4) { - Sum = (UINT8) (Sum + ptr[Index]); - Sum = (UINT8) (Sum + ptr[Index + 1]); - Sum = (UINT8) (Sum + ptr[Index + 2]); - Sum = (UINT8) (Sum + ptr[Index + 3]); - } - - for (; Index < sizeof (EFI_FFS_FILE_HEADER); Index++) { - Sum = (UINT8) (Sum + ptr[Index]); - } - // - // State field (since this indicates the different state of file). - // - Sum = (UINT8) (Sum - FileHeader->State); - // - // Checksum field of the file is not part of the header checksum. - // - Sum = (UINT8) (Sum - FileHeader->IntegrityCheck.Checksum.File); - - return Sum; -} - -EFI_STATUS -SecFfsFindNextFile ( - IN EFI_FV_FILETYPE SearchType, - IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader, - IN OUT EFI_FFS_FILE_HEADER **FileHeader - ) -/*++ - -Routine Description: - Given the input file pointer, search for the next matching file in the - FFS volume as defined by SearchType. The search starts from FileHeader inside - the Firmware Volume defined by FwVolHeader. - -Arguments: - SearchType - Filter to find only files of this type. - Type EFI_FV_FILETYPE_ALL causes no filtering to be done. - FwVolHeader - Pointer to the FV header of the volume to search. - This parameter must point to a valid FFS volume. - FileHeader - Pointer to the current file from which to begin searching. - This pointer will be updated upon return to reflect the file - found. - -Returns: - EFI_NOT_FOUND - No files matching the search criteria were found - EFI_SUCCESS - ---*/ -{ - EFI_FFS_FILE_HEADER *FfsFileHeader; - UINT32 FileLength; - UINT32 FileOccupiedSize; - UINT32 FileOffset; - UINT64 FvLength; - UINT8 ErasePolarity; - UINT8 FileState; - - FvLength = FwVolHeader->FvLength; - if (FwVolHeader->Attributes & EFI_FVB2_ERASE_POLARITY) { - ErasePolarity = 1; - } else { - ErasePolarity = 0; - } - // - // If FileHeader is not specified (NULL) start with the first file in the - // firmware volume. Otherwise, start from the FileHeader. - // - if (*FileHeader == NULL) { - FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolHeader + FwVolHeader->HeaderLength); - } else { - // - // Length is 24 bits wide so mask upper 8 bits - // FileLength is adjusted to FileOccupiedSize as it is 8 byte aligned. - // - FileLength = *(UINT32 *) (*FileHeader)->Size & 0x00FFFFFF; - FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8); - FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) *FileHeader + FileOccupiedSize); - } - - FileOffset = (UINT32) ((UINT8 *) FfsFileHeader - (UINT8 *) FwVolHeader); - - while (FileOffset < (FvLength - sizeof (EFI_FFS_FILE_HEADER))) { - // - // Get FileState which is the highest bit of the State - // - FileState = GetFileState (ErasePolarity, FfsFileHeader); - - switch (FileState) { - - case EFI_FILE_HEADER_INVALID: - FileOffset += sizeof (EFI_FFS_FILE_HEADER); - FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + sizeof (EFI_FFS_FILE_HEADER)); - break; - - case EFI_FILE_DATA_VALID: - case EFI_FILE_MARKED_FOR_UPDATE: - if (CalculateHeaderChecksum (FfsFileHeader) == 0) { - FileLength = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF; - FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8); - - if ((SearchType == FfsFileHeader->Type) || (SearchType == EFI_FV_FILETYPE_ALL)) { - - *FileHeader = FfsFileHeader; - - return EFI_SUCCESS; - } - - FileOffset += FileOccupiedSize; - FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + FileOccupiedSize); - } else { - return EFI_NOT_FOUND; - } - break; - - case EFI_FILE_DELETED: - FileLength = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF; - FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8); - FileOffset += FileOccupiedSize; - FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + FileOccupiedSize); - break; - - default: - return EFI_NOT_FOUND; - - } - } - - return EFI_NOT_FOUND; -} - -EFI_STATUS -SecFfsFindSectionData ( - IN EFI_SECTION_TYPE SectionType, - IN EFI_FFS_FILE_HEADER *FfsFileHeader, - IN OUT VOID **SectionData - ) -/*++ - -Routine Description: - Given the input file pointer, search for the next matching section in the - FFS volume. - -Arguments: - SearchType - Filter to find only sections of this type. - FfsFileHeader - Pointer to the current file to search. - SectionData - Pointer to the Section matching SectionType in FfsFileHeader. - NULL if section not found - -Returns: - EFI_NOT_FOUND - No files matching the search criteria were found - EFI_SUCCESS - ---*/ -{ - UINT32 FileSize; - EFI_COMMON_SECTION_HEADER *Section; - UINT32 SectionLength; - UINT32 ParsedLength; - - // - // Size is 24 bits wide so mask upper 8 bits. - // Does not include FfsFileHeader header size - // FileSize is adjusted to FileOccupiedSize as it is 8 byte aligned. - // - Section = (EFI_COMMON_SECTION_HEADER *) (FfsFileHeader + 1); - FileSize = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF; - FileSize -= sizeof (EFI_FFS_FILE_HEADER); - - *SectionData = NULL; - ParsedLength = 0; - while (ParsedLength < FileSize) { - if (Section->Type == SectionType) { - *SectionData = (VOID *) (Section + 1); - return EFI_SUCCESS; - } - // - // Size is 24 bits wide so mask upper 8 bits. - // SectionLength is adjusted it is 4 byte aligned. - // Go to the next section - // - SectionLength = *(UINT32 *) Section->Size & 0x00FFFFFF; - SectionLength = GET_OCCUPIED_SIZE (SectionLength, 4); - - ParsedLength += SectionLength; - Section = (EFI_COMMON_SECTION_HEADER *) ((UINT8 *) Section + SectionLength); - } - - return EFI_NOT_FOUND; -} - -EFI_STATUS -SecFfsFindPeiCore ( - IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader, - OUT VOID **Pe32Data - ) -/*++ - -Routine Description: - Given the pointer to the Firmware Volume Header find the SEC - core and return it's PE32 image. - -Arguments: - FwVolHeader - Pointer to memory mapped FV - Pe32Data - Pointer to SEC PE32 iamge. - -Returns: - EFI_SUCCESS - Pe32Data is valid - other - Failure - ---*/ -{ - EFI_STATUS Status; - EFI_FFS_FILE_HEADER *FileHeader; - EFI_FV_FILETYPE SearchType; - - SearchType = EFI_FV_FILETYPE_PEI_CORE; - FileHeader = NULL; - do { - Status = SecFfsFindNextFile (SearchType, FwVolHeader, &FileHeader); - if (!EFI_ERROR (Status)) { - Status = SecFfsFindSectionData (EFI_SECTION_PE32, FileHeader, Pe32Data); - return Status; - } - } while (!EFI_ERROR (Status)); - - return Status; -} diff --git a/Nt32Pkg/Sec/SecMain.c b/Nt32Pkg/Sec/SecMain.c deleted file mode 100644 index 80539faa33..0000000000 --- a/Nt32Pkg/Sec/SecMain.c +++ /dev/null @@ -1,1136 +0,0 @@ -/**@file - -Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
-(C) Copyright 2016 Hewlett Packard Enterprise Development LP
-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.c - -Abstract: - WinNt emulator of SEC phase. It's really a Win32 application, but this is - Ok since all the other modules for NT32 are NOT Win32 applications. - - This program gets NT32 PCD setting and figures out what the memory layout - will be, how may FD's will be loaded and also what the boot mode is. - - The SEC registers a set of services with the SEC core. gPrivateDispatchTable - is a list of PPI's produced by the SEC that are available for usage in PEI. - - This code produces 128 K of temporary memory for the PEI stack by directly - allocate memory space with ReadWrite and Execute attribute. - -**/ - -#include "SecMain.h" - -#ifndef SE_TIME_ZONE_NAME -#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege") -#endif - -NT_PEI_LOAD_FILE_PPI mSecNtLoadFilePpi = { SecWinNtPeiLoadFile }; - -PEI_NT_AUTOSCAN_PPI mSecNtAutoScanPpi = { SecWinNtPeiAutoScan }; - -PEI_NT_THUNK_PPI mSecWinNtThunkPpi = { SecWinNtWinNtThunkAddress }; - -EFI_PEI_PROGRESS_CODE_PPI mSecStatusCodePpi = { SecPeiReportStatusCode }; - -NT_FWH_PPI mSecFwhInformationPpi = { SecWinNtFdAddress }; - -EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mSecTemporaryRamSupportPpi = {SecTemporaryRamSupport}; - -EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI, - &gNtPeiLoadFilePpiGuid, - &mSecNtLoadFilePpi - }, - { - EFI_PEI_PPI_DESCRIPTOR_PPI, - &gPeiNtAutoScanPpiGuid, - &mSecNtAutoScanPpi - }, - { - EFI_PEI_PPI_DESCRIPTOR_PPI, - &gPeiNtThunkPpiGuid, - &mSecWinNtThunkPpi - }, - { - EFI_PEI_PPI_DESCRIPTOR_PPI, - &gEfiPeiStatusCodePpiGuid, - &mSecStatusCodePpi - }, - { - EFI_PEI_PPI_DESCRIPTOR_PPI, - &gEfiTemporaryRamSupportPpiGuid, - &mSecTemporaryRamSupportPpi - }, - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gNtFwhPpiGuid, - &mSecFwhInformationPpi - } -}; - - -// -// Default information about where the FD is located. -// This array gets filled in with information from PcdWinNtFirmwareVolume -// The number of array elements is allocated base on parsing -// PcdWinNtFirmwareVolume and the memory is never freed. -// -UINTN gFdInfoCount = 0; -NT_FD_INFO *gFdInfo; - -// -// Array that supports seperate memory rantes. -// The memory ranges are set by PcdWinNtMemorySizeForSecMain. -// The number of array elements is allocated base on parsing -// PcdWinNtMemorySizeForSecMain value and the memory is never freed. -// -UINTN gSystemMemoryCount = 0; -NT_SYSTEM_MEMORY *gSystemMemory; - -VOID -EFIAPI -SecSwitchStack ( - UINT32 TemporaryMemoryBase, - UINT32 PermenentMemoryBase - ); -EFI_STATUS -SecNt32PeCoffRelocateImage ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext - ); - -VOID -EFIAPI -PeiSwitchStacks ( - IN SWITCH_STACK_ENTRY_POINT EntryPoint, - IN VOID *Context1, OPTIONAL - IN VOID *Context2, OPTIONAL - IN VOID *Context3, OPTIONAL - IN VOID *NewStack - ); - -VOID -SecPrint ( - CHAR8 *Format, - ... - ) -{ - va_list Marker; - UINTN CharCount; - CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE]; - - va_start (Marker, Format); - - _vsnprintf (Buffer, sizeof (Buffer), Format, Marker); - - va_end (Marker); - - CharCount = strlen (Buffer); - WriteFile ( - GetStdHandle (STD_OUTPUT_HANDLE), - Buffer, - (DWORD)CharCount, - (LPDWORD)&CharCount, - NULL - ); -} - -INTN -EFIAPI -main ( - IN INTN Argc, - IN CHAR8 **Argv, - IN CHAR8 **Envp - ) -/*++ - -Routine Description: - Main entry point to SEC for WinNt. This is a Windows program - -Arguments: - Argc - Number of command line arguments - Argv - Array of command line argument strings - Envp - Array of environment variable strings - -Returns: - 0 - Normal exit - 1 - Abnormal exit - ---*/ -{ - EFI_STATUS Status; - HANDLE Token; - TOKEN_PRIVILEGES TokenPrivileges; - EFI_PHYSICAL_ADDRESS InitialStackMemory; - UINT64 InitialStackMemorySize; - UINTN Index; - UINTN Index1; - UINTN Index2; - CHAR16 *FileName; - CHAR16 *FileNamePtr; - BOOLEAN Done; - VOID *PeiCoreFile; - CHAR16 *MemorySizeStr; - CHAR16 *FirmwareVolumesStr; - UINTN *StackPointer; - UINT32 ProcessAffinityMask; - UINT32 SystemAffinityMask; - INT32 LowBit; - - - // - // Enable the privilege so that RTC driver can successfully run SetTime() - // - OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &Token); - if (LookupPrivilegeValue(NULL, SE_TIME_ZONE_NAME, &TokenPrivileges.Privileges[0].Luid)) { - TokenPrivileges.PrivilegeCount = 1; - TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - AdjustTokenPrivileges(Token, FALSE, &TokenPrivileges, 0, (PTOKEN_PRIVILEGES) NULL, 0); - } - - MemorySizeStr = (CHAR16 *) PcdGetPtr (PcdWinNtMemorySizeForSecMain); - FirmwareVolumesStr = (CHAR16 *) PcdGetPtr (PcdWinNtFirmwareVolume); - - SecPrint ("\nEDK II SEC Main NT Emulation Environment from www.TianoCore.org\n"); - - // - // Determine the first thread available to this process. - // - if (GetProcessAffinityMask (GetCurrentProcess (), &ProcessAffinityMask, &SystemAffinityMask)) { - LowBit = (INT32)LowBitSet32 (ProcessAffinityMask); - if (LowBit != -1) { - // - // Force the system to bind the process to a single thread to work - // around odd semaphore type crashes. - // - SetProcessAffinityMask (GetCurrentProcess (), (INTN)(BIT0 << LowBit)); - } - } - - // - // Make some Windows calls to Set the process to the highest priority in the - // idle class. We need this to have good performance. - // - SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS); - SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST); - - // - // Allocate space for gSystemMemory Array - // - gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1; - gSystemMemory = calloc (gSystemMemoryCount, sizeof (NT_SYSTEM_MEMORY)); - if (gSystemMemory == NULL) { - SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n", MemorySizeStr); - exit (1); - } - // - // Allocate space for gSystemMemory Array - // - gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1; - gFdInfo = calloc (gFdInfoCount, sizeof (NT_FD_INFO)); - if (gFdInfo == NULL) { - SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n", FirmwareVolumesStr); - exit (1); - } - // - // Setup Boot Mode. If BootModeStr == "" then BootMode = 0 (BOOT_WITH_FULL_CONFIGURATION) - // - SecPrint (" BootMode 0x%02x\n", PcdGet32 (PcdWinNtBootMode)); - - // - // Allocate 128K memory to emulate temp memory for PEI. - // on a real platform this would be SRAM, or using the cache as RAM. - // Set InitialStackMemory to zero so WinNtOpenFile will allocate a new mapping - // - InitialStackMemorySize = STACK_SIZE; - InitialStackMemory = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (InitialStackMemorySize), MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if (InitialStackMemory == 0) { - SecPrint ("ERROR : Can not allocate enough space for SecStack\n"); - exit (1); - } - - for (StackPointer = (UINTN*) (UINTN) InitialStackMemory; - StackPointer < (UINTN*) ((UINTN)InitialStackMemory + (SIZE_T) InitialStackMemorySize); - StackPointer ++) { - *StackPointer = 0x5AA55AA5; - } - - SecPrint (" SEC passing in %d bytes of temp RAM to PEI\n", InitialStackMemorySize); - - // - // Open All the firmware volumes and remember the info in the gFdInfo global - // - FileNamePtr = (CHAR16 *)malloc (StrLen ((CHAR16 *)FirmwareVolumesStr) * sizeof(CHAR16)); - if (FileNamePtr == NULL) { - SecPrint ("ERROR : Can not allocate memory for firmware volume string\n"); - exit (1); - } - - StrCpy (FileNamePtr, (CHAR16*)FirmwareVolumesStr); - - for (Done = FALSE, Index = 0, PeiCoreFile = NULL; !Done; Index++) { - FileName = FileNamePtr; - for (Index1 = 0; (FileNamePtr[Index1] != '!') && (FileNamePtr[Index1] != 0); Index1++) - ; - if (FileNamePtr[Index1] == 0) { - Done = TRUE; - } else { - FileNamePtr[Index1] = '\0'; - FileNamePtr = FileNamePtr + Index1 + 1; - } - - // - // Open the FD and remember where it got mapped into our processes address space - // - Status = WinNtOpenFile ( - FileName, - 0, - OPEN_EXISTING, - &gFdInfo[Index].Address, - &gFdInfo[Index].Size - ); - if (EFI_ERROR (Status)) { - SecPrint ("ERROR : Can not open Firmware Device File %S (0x%X). Exiting.\n", FileName, Status); - exit (1); - } - - SecPrint (" FD loaded from"); - // - // printf can't print filenames directly as the \ gets interpreted as an - // escape character. - // - for (Index2 = 0; FileName[Index2] != '\0'; Index2++) { - SecPrint ("%c", FileName[Index2]); - } - - if (PeiCoreFile == NULL) { - // - // Assume the beginning of the FD is an FV and look for the PEI Core. - // Load the first one we find. - // - Status = SecFfsFindPeiCore ((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) gFdInfo[Index].Address, &PeiCoreFile); - if (!EFI_ERROR (Status)) { - SecPrint (" contains SEC Core"); - } - } - - SecPrint ("\n"); - } - // - // Calculate memory regions and store the information in the gSystemMemory - // global for later use. The autosizing code will use this data to - // map this memory into the SEC process memory space. - // - for (Index = 0, Done = FALSE; !Done; Index++) { - // - // Save the size of the memory and make a Unicode filename SystemMemory00, ... - // - gSystemMemory[Index].Size = _wtoi (MemorySizeStr) * 0x100000; - - // - // Find the next region - // - for (Index1 = 0; MemorySizeStr[Index1] != '!' && MemorySizeStr[Index1] != 0; Index1++) - ; - if (MemorySizeStr[Index1] == 0) { - Done = TRUE; - } - - MemorySizeStr = MemorySizeStr + Index1 + 1; - } - - SecPrint ("\n"); - - // - // Hand off to PEI Core - // - SecLoadFromCore ((UINTN) InitialStackMemory, (UINTN) InitialStackMemorySize, (UINTN) gFdInfo[0].Address, PeiCoreFile); - - // - // If we get here, then the PEI Core returned. This is an error as PEI should - // always hand off to DXE. - // - SecPrint ("ERROR : PEI Core returned\n"); - exit (1); -} - -EFI_STATUS -WinNtOpenFile ( - IN CHAR16 *FileName, - IN UINT32 MapSize, - IN DWORD CreationDisposition, - IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress, - OUT UINT64 *Length - ) -/*++ - -Routine Description: - Opens and memory maps a file using WinNt services. If BaseAddress is non zero - the process will try and allocate the memory starting at BaseAddress. - -Arguments: - FileName - The name of the file to open and map - MapSize - The amount of the file to map in bytes - CreationDisposition - The flags to pass to CreateFile(). Use to create new files for - memory emulation, and exiting files for firmware volume emulation - BaseAddress - The base address of the mapped file in the user address space. - If passed in as NULL the new memory region is used. - If passed in as non NULL the request memory region is used for - the mapping of the file into the process space. - Length - The size of the mapped region in bytes - -Returns: - EFI_SUCCESS - The file was opened and mapped. - EFI_NOT_FOUND - FileName was not found in the current directory - EFI_DEVICE_ERROR - An error occured attempting to map the opened file - ---*/ -{ - HANDLE NtFileHandle; - HANDLE NtMapHandle; - VOID *VirtualAddress; - UINTN FileSize; - - // - // Use Win API to open/create a file - // - NtFileHandle = CreateFile ( - FileName, - GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE, - FILE_SHARE_READ, - NULL, - CreationDisposition, - FILE_ATTRIBUTE_NORMAL, - NULL - ); - if (NtFileHandle == INVALID_HANDLE_VALUE) { - return EFI_NOT_FOUND; - } - // - // Map the open file into a memory range - // - NtMapHandle = CreateFileMapping ( - NtFileHandle, - NULL, - PAGE_EXECUTE_READWRITE, - 0, - MapSize, - NULL - ); - if (NtMapHandle == NULL) { - return EFI_DEVICE_ERROR; - } - // - // Get the virtual address (address in the emulator) of the mapped file - // - VirtualAddress = MapViewOfFileEx ( - NtMapHandle, - FILE_MAP_EXECUTE | FILE_MAP_ALL_ACCESS, - 0, - 0, - MapSize, - (LPVOID) (UINTN) *BaseAddress - ); - if (VirtualAddress == NULL) { - return EFI_DEVICE_ERROR; - } - - if (MapSize == 0) { - // - // Seek to the end of the file to figure out the true file size. - // - FileSize = SetFilePointer ( - NtFileHandle, - 0, - NULL, - FILE_END - ); - if (FileSize == -1) { - return EFI_DEVICE_ERROR; - } - - *Length = (UINT64) FileSize; - } else { - *Length = (UINT64) MapSize; - } - - *BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAddress; - - return EFI_SUCCESS; -} - - -#define BYTES_PER_RECORD 512 - -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: - - This routine produces the ReportStatusCode PEI service. It's passed - up to the PEI Core via a PPI. T - - This code currently uses the NT clib printf. This does not work the same way - as the EFI Print (), as %t, %g, %s as Unicode are not supported. - -Arguments: - (see EFI_PEI_REPORT_STATUS_CODE) - -Returns: - EFI_SUCCESS - Always return success - ---*/ -// TODO: PeiServices - add argument and description to function comment -// TODO: CodeType - add argument and description to function comment -// TODO: Value - add argument and description to function comment -// TODO: Instance - add argument and description to function comment -// TODO: CallerId - add argument and description to function comment -// TODO: Data - add argument and description to function comment -{ - CHAR8 *Format; - BASE_LIST Marker; - CHAR8 PrintBuffer[BYTES_PER_RECORD * 2]; - CHAR8 *Filename; - CHAR8 *Description; - UINT32 LineNumber; - UINT32 ErrorLevel; - - - if (Data == NULL) { - } else if (ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) { - // - // Processes ASSERT () - // - SecPrint ("ASSERT %s(%d): %s\n", Filename, (int)LineNumber, Description); - - } else if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) { - // - // Process DEBUG () macro - // - AsciiBSPrint (PrintBuffer, BYTES_PER_RECORD, Format, Marker); - SecPrint (PrintBuffer); - } - - return EFI_SUCCESS; -} - -#if defined (MDE_CPU_IA32) -/** - Transfers control to a function starting with a new stack. - - Transfers control to the function specified by EntryPoint using the new stack - specified by NewStack and passing in the parameters specified by Context1 and - Context2. Context1 and Context2 are optional and may be NULL. The function - EntryPoint must never return. - - If EntryPoint is NULL, then ASSERT(). - If NewStack is NULL, then ASSERT(). - - @param EntryPoint A pointer to function to call with the new stack. - @param Context1 A pointer to the context to pass into the EntryPoint - function. - @param Context2 A pointer to the context to pass into the EntryPoint - function. - @param NewStack A pointer to the new stack to use for the EntryPoint - function. - @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's - Reserved on other architectures. - -**/ -VOID -EFIAPI -PeiSwitchStacks ( - IN SWITCH_STACK_ENTRY_POINT EntryPoint, - IN VOID *Context1, OPTIONAL - IN VOID *Context2, OPTIONAL - IN VOID *Context3, OPTIONAL - IN VOID *NewStack - ) -{ - BASE_LIBRARY_JUMP_BUFFER JumpBuffer; - - ASSERT (EntryPoint != NULL); - ASSERT (NewStack != NULL); - - // - // Stack should be aligned with CPU_STACK_ALIGNMENT - // - ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0); - - JumpBuffer.Eip = (UINTN)EntryPoint; - JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID*); - JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2) + sizeof(Context3); - ((VOID**)JumpBuffer.Esp)[1] = Context1; - ((VOID**)JumpBuffer.Esp)[2] = Context2; - ((VOID**)JumpBuffer.Esp)[3] = Context3; - - LongJump (&JumpBuffer, (UINTN)-1); - - - // - // InternalSwitchStack () will never return - // - ASSERT (FALSE); -} -#endif - -VOID -SecLoadFromCore ( - IN UINTN LargestRegion, - IN UINTN LargestRegionSize, - IN UINTN BootFirmwareVolumeBase, - IN VOID *PeiCorePe32File - ) -/*++ - -Routine Description: - This is the service to load the PEI Core from the Firmware Volume - -Arguments: - LargestRegion - Memory to use for PEI. - LargestRegionSize - Size of Memory to use for PEI - BootFirmwareVolumeBase - Start of the Boot FV - PeiCorePe32File - PEI Core PE32 - -Returns: - Success means control is transfered and thus we should never return - ---*/ -{ - EFI_STATUS Status; - VOID *TopOfStack; - UINT64 PeiCoreSize; - EFI_PHYSICAL_ADDRESS PeiCoreEntryPoint; - EFI_PHYSICAL_ADDRESS PeiImageAddress; - EFI_SEC_PEI_HAND_OFF *SecCoreData; - UINTN PeiStackSize; - - // - // Compute Top Of Memory for Stack and PEI Core Allocations - // - PeiStackSize = (UINTN)RShiftU64((UINT64)STACK_SIZE,1); - - // - // |-----------| <---- TemporaryRamBase + TemporaryRamSize - // | Heap | - // | | - // |-----------| <---- StackBase / PeiTemporaryMemoryBase - // | | - // | Stack | - // |-----------| <---- TemporaryRamBase - // - TopOfStack = (VOID *)(LargestRegion + PeiStackSize); - - // - // Reservet space for storing PeiCore's parament in stack. - // - TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT); - TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); - - // - // Bind this information into the SEC hand-off state - // - SecCoreData = (EFI_SEC_PEI_HAND_OFF*)(UINTN) TopOfStack; - SecCoreData->DataSize = sizeof(EFI_SEC_PEI_HAND_OFF); - SecCoreData->BootFirmwareVolumeBase = (VOID*)BootFirmwareVolumeBase; - SecCoreData->BootFirmwareVolumeSize = PcdGet32(PcdWinNtFirmwareFdSize); - SecCoreData->TemporaryRamBase = (VOID*)(UINTN)LargestRegion; - SecCoreData->TemporaryRamSize = STACK_SIZE; - SecCoreData->StackBase = SecCoreData->TemporaryRamBase; - SecCoreData->StackSize = PeiStackSize; - SecCoreData->PeiTemporaryRamBase = (VOID*) ((UINTN) SecCoreData->TemporaryRamBase + PeiStackSize); - SecCoreData->PeiTemporaryRamSize = STACK_SIZE - PeiStackSize; - - // - // Load the PEI Core from a Firmware Volume - // - Status = SecWinNtPeiLoadFile ( - PeiCorePe32File, - &PeiImageAddress, - &PeiCoreSize, - &PeiCoreEntryPoint - ); - if (EFI_ERROR (Status)) { - return ; - } - - // - // Transfer control to the PEI Core - // - PeiSwitchStacks ( - (SWITCH_STACK_ENTRY_POINT) (UINTN) PeiCoreEntryPoint, - SecCoreData, - (VOID *) (UINTN) ((EFI_PEI_PPI_DESCRIPTOR *) &gPrivateDispatchTable), - NULL, - TopOfStack - ); - // - // If we get here, then the PEI Core returned. This is an error - // - return ; -} - -EFI_STATUS -EFIAPI -SecWinNtPeiAutoScan ( - IN UINTN Index, - OUT EFI_PHYSICAL_ADDRESS *MemoryBase, - OUT UINT64 *MemorySize - ) -/*++ - -Routine Description: - This service is called from Index == 0 until it returns EFI_UNSUPPORTED. - It allows discontinuous memory regions to be supported by the emulator. - It uses gSystemMemory[] and gSystemMemoryCount that were created by - parsing PcdWinNtMemorySizeForSecMain value. - The size comes from the Pcd value and the address comes from the memory space - with ReadWrite and Execute attributes allocated by VirtualAlloc() API. - -Arguments: - Index - Which memory region to use - MemoryBase - Return Base address of memory region - MemorySize - Return size in bytes of the memory region - -Returns: - EFI_SUCCESS - If memory region was mapped - EFI_UNSUPPORTED - If Index is not supported - ---*/ -{ - if (Index >= gSystemMemoryCount) { - return EFI_UNSUPPORTED; - } - - // - // Allocate enough memory space for emulator - // - gSystemMemory[Index].Memory = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (gSystemMemory[Index].Size), MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if (gSystemMemory[Index].Memory == 0) { - return EFI_OUT_OF_RESOURCES; - } - - *MemoryBase = gSystemMemory[Index].Memory; - *MemorySize = gSystemMemory[Index].Size; - - return EFI_SUCCESS; -} - -VOID * -EFIAPI -SecWinNtWinNtThunkAddress ( - VOID - ) -/*++ - -Routine Description: - Since the SEC is the only Windows program in stack it must export - an interface to do Win API calls. That's what the WinNtThunk address - is for. gWinNt is initialized in WinNtThunk.c. - -Arguments: - InterfaceSize - sizeof (EFI_WIN_NT_THUNK_PROTOCOL); - InterfaceBase - Address of the gWinNt global - -Returns: - EFI_SUCCESS - Data returned - ---*/ -{ - return gWinNt; -} - - -EFI_STATUS -EFIAPI -SecWinNtPeiLoadFile ( - IN VOID *Pe32Data, - IN EFI_PHYSICAL_ADDRESS *ImageAddress, - IN UINT64 *ImageSize, - IN EFI_PHYSICAL_ADDRESS *EntryPoint - ) -/*++ - -Routine Description: - Loads and relocates a PE/COFF image into memory. - -Arguments: - Pe32Data - The base address of the PE/COFF file that is to be loaded and relocated - ImageAddress - The base address of the relocated PE/COFF image - ImageSize - The size of the relocated PE/COFF image - EntryPoint - The entry point of the relocated PE/COFF image - -Returns: - EFI_SUCCESS - The file was loaded and relocated - EFI_OUT_OF_RESOURCES - There was not enough memory to load and relocate the PE/COFF file - ---*/ -{ - EFI_STATUS Status; - PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; - - ZeroMem (&ImageContext, sizeof (ImageContext)); - ImageContext.Handle = Pe32Data; - - ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) SecImageRead; - - Status = PeCoffLoaderGetImageInfo (&ImageContext); - if (EFI_ERROR (Status)) { - return Status; - } - // - // Allocate space in NT (not emulator) memory with ReadWrite and Execute attribute. - // Extra space is for alignment - // - ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) VirtualAlloc (NULL, (SIZE_T) (ImageContext.ImageSize + (ImageContext.SectionAlignment * 2)), MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if (ImageContext.ImageAddress == 0) { - return EFI_OUT_OF_RESOURCES; - } - // - // Align buffer on section boundary - // - ImageContext.ImageAddress += ImageContext.SectionAlignment - 1; - ImageContext.ImageAddress &= ~((EFI_PHYSICAL_ADDRESS)ImageContext.SectionAlignment - 1); - - Status = PeCoffLoaderLoadImage (&ImageContext); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = SecNt32PeCoffRelocateImage (&ImageContext); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // BugBug: Flush Instruction Cache Here when CPU Lib is ready - // - - *ImageAddress = ImageContext.ImageAddress; - *ImageSize = ImageContext.ImageSize; - *EntryPoint = ImageContext.EntryPoint; - - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -SecWinNtFdAddress ( - IN UINTN Index, - IN OUT EFI_PHYSICAL_ADDRESS *FdBase, - IN OUT UINT64 *FdSize - ) -/*++ - -Routine Description: - Return the FD Size and base address. Since the FD is loaded from a - file into Windows memory only the SEC will know it's address. - -Arguments: - Index - Which FD, starts at zero. - FdSize - Size of the FD in bytes - FdBase - Start address of the FD. Assume it points to an FV Header - -Returns: - EFI_SUCCESS - Return the Base address and size of the FV - EFI_UNSUPPORTED - Index does not map to an FD in the system - ---*/ -{ - if (Index >= gFdInfoCount) { - return EFI_UNSUPPORTED; - } - - *FdBase = gFdInfo[Index].Address; - *FdSize = gFdInfo[Index].Size; - - if (*FdBase == 0 && *FdSize == 0) { - return EFI_UNSUPPORTED; - } - - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -SecImageRead ( - IN VOID *FileHandle, - IN UINTN FileOffset, - IN OUT UINTN *ReadSize, - OUT VOID *Buffer - ) -/*++ - -Routine Description: - Support routine for the PE/COFF Loader that reads a buffer from a PE/COFF file - -Arguments: - FileHandle - The handle to the PE/COFF file - FileOffset - The offset, in bytes, into the file to read - ReadSize - The number of bytes to read from the file starting at FileOffset - Buffer - A pointer to the buffer to read the data into. - -Returns: - EFI_SUCCESS - ReadSize bytes of data were read into Buffer from the PE/COFF file starting at FileOffset - ---*/ -{ - CHAR8 *Destination8; - CHAR8 *Source8; - UINTN Length; - - Destination8 = Buffer; - Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset); - Length = *ReadSize; - while (Length--) { - *(Destination8++) = *(Source8++); - } - - return EFI_SUCCESS; -} - -CHAR16 * -AsciiToUnicode ( - IN CHAR8 *Ascii, - IN UINTN *StrLen OPTIONAL - ) -/*++ - -Routine Description: - Convert the passed in Ascii string to Unicode. - Optionally return the length of the strings. - -Arguments: - Ascii - Ascii string to convert - StrLen - Length of string - -Returns: - Pointer to malloc'ed Unicode version of Ascii - ---*/ -{ - UINTN Index; - CHAR16 *Unicode; - - // - // Allocate a buffer for unicode string - // - for (Index = 0; Ascii[Index] != '\0'; Index++) - ; - Unicode = malloc ((Index + 1) * sizeof (CHAR16)); - if (Unicode == NULL) { - return NULL; - } - - for (Index = 0; Ascii[Index] != '\0'; Index++) { - Unicode[Index] = (CHAR16) Ascii[Index]; - } - - Unicode[Index] = '\0'; - - if (StrLen != NULL) { - *StrLen = Index; - } - - return Unicode; -} - -UINTN -CountSeparatorsInString ( - IN CONST CHAR16 *String, - IN CHAR16 Separator - ) -/*++ - -Routine Description: - Count the number of separators in String - -Arguments: - String - String to process - Separator - Item to count - -Returns: - Number of Separator in String - ---*/ -{ - UINTN Count; - - for (Count = 0; *String != '\0'; String++) { - if (*String == Separator) { - Count++; - } - } - - return Count; -} - - -EFI_STATUS -SecNt32PeCoffRelocateImage ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext - ) -{ - EFI_STATUS Status; - VOID *DllEntryPoint; - CHAR16 *DllFileName; - HMODULE Library; - UINTN Index; - - - Status = PeCoffLoaderRelocateImage (ImageContext); - if (EFI_ERROR (Status)) { - // - // We could not relocated the image in memory properly - // - return Status; - } - - // - // If we load our own PE COFF images the Windows debugger can not source - // level debug our code. If a valid PDB pointer exists usw it to load - // the *.dll file as a library using Windows* APIs. This allows - // source level debug. The image is still loaded and relocated - // in the Framework memory space like on a real system (by the code above), - // but the entry point points into the DLL loaded by the code bellow. - // - - DllEntryPoint = NULL; - - // - // Load the DLL if it's not an EBC image. - // - if ((ImageContext->PdbPointer != NULL) && - (ImageContext->Machine != EFI_IMAGE_MACHINE_EBC)) { - // - // Convert filename from ASCII to Unicode - // - DllFileName = AsciiToUnicode (ImageContext->PdbPointer, &Index); - - // - // Check that we have a valid filename - // - if (Index < 5 || DllFileName[Index - 4] != '.') { - free (DllFileName); - - // - // Never return an error if PeCoffLoaderRelocateImage() succeeded. - // The image will run, but we just can't source level debug. If we - // return an error the image will not run. - // - return EFI_SUCCESS; - } - // - // Replace .PDB with .DLL on the filename - // - DllFileName[Index - 3] = 'D'; - DllFileName[Index - 2] = 'L'; - DllFileName[Index - 1] = 'L'; - - // - // Load the .DLL file into the user process's address space for source - // level debug - // - Library = LoadLibraryEx (DllFileName, NULL, DONT_RESOLVE_DLL_REFERENCES); - if (Library != NULL) { - // - // InitializeDriver is the entry point we put in all our EFI DLL's. The - // DONT_RESOLVE_DLL_REFERENCES argument to LoadLIbraryEx() suppresses the - // normal DLL entry point of DllMain, and prevents other modules that are - // referenced in side the DllFileName from being loaded. There is no error - // checking as the we can point to the PE32 image loaded by Tiano. This - // step is only needed for source level debugging - // - DllEntryPoint = (VOID *) (UINTN) GetProcAddress (Library, "InitializeDriver"); - - } - - if ((Library != NULL) && (DllEntryPoint != NULL)) { - ImageContext->EntryPoint = (EFI_PHYSICAL_ADDRESS) (UINTN) DllEntryPoint; - SecPrint ("LoadLibraryEx (%S,\n NULL, DONT_RESOLVE_DLL_REFERENCES)\n", DllFileName); - } else { - SecPrint ("WARNING: No source level debug %S. \n", DllFileName); - } - - free (DllFileName); - } - - // - // Never return an error if PeCoffLoaderRelocateImage() succeeded. - // The image will run, but we just can't source level debug. If we - // return an error the image will not run. - // - return EFI_SUCCESS; -} - - - - -VOID -_ModuleEntryPoint ( - VOID - ) -{ -} - -EFI_STATUS -EFIAPI -SecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize - ) -{ - // - // Migrate the whole temporary memory to permanent memory. - // - CopyMem ( - (VOID*)(UINTN)PermanentMemoryBase, - (VOID*)(UINTN)TemporaryMemoryBase, - CopySize - ); - - // - // SecSwitchStack function must be invoked after the memory migration - // immediately, also we need fixup the stack change caused by new call into - // permanent memory. - // - SecSwitchStack ( - (UINT32) TemporaryMemoryBase, - (UINT32) PermanentMemoryBase - ); - - // - // We need *not* fix the return address because currently, - // The PeiCore is executed in flash. - // - - // - // Simulate to invalid temporary memory, terminate temporary memory - // - //ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize); - - return EFI_SUCCESS; -} - diff --git a/Nt32Pkg/Sec/SecMain.h b/Nt32Pkg/Sec/SecMain.h deleted file mode 100644 index 8b198789b2..0000000000 --- a/Nt32Pkg/Sec/SecMain.h +++ /dev/null @@ -1,559 +0,0 @@ -/**@file - -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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#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 -CountSeparatorsInString ( - IN CONST CHAR16 *String, - IN CHAR16 Separator - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - String - TODO: add argument description - Separator - 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; diff --git a/Nt32Pkg/Sec/SecMain.inf b/Nt32Pkg/Sec/SecMain.inf deleted file mode 100644 index 423a3c7c48..0000000000 --- a/Nt32Pkg/Sec/SecMain.inf +++ /dev/null @@ -1,90 +0,0 @@ -## @file -# Entry Point of NT32 Emulator -# -# Main executable file of NT32 Emulator that loads PEI core after initialization finished. -# -# Copyright (c) 2007 - 2011, 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. -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SecMain - FILE_GUID = 4b837b03-6587-4d19-b82b-edfad836c0a0 - MODULE_TYPE = USER_DEFINED - VERSION_STRING = 1.0 - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 -# - -[Sources] - SecMain.h - WinNtThunk.c - FwVol.c - SecMain.c - -[Sources.ia32] - Stack.asm - -[Sources.x64] - StackX64.asm - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - Nt32Pkg/Nt32Pkg.dec - -[LibraryClasses] - DebugLib - PcdLib - PrintLib - BaseMemoryLib - BaseLib - PeCoffLib - ReportStatusCodeLib - -[Ppis] - gNtPeiLoadFilePpiGuid # PPI ALWAYS_PRODUCED - gEfiPeiStatusCodePpiGuid # PPI ALWAYS_PRODUCED - gNtFwhPpiGuid # PPI ALWAYS_PRODUCED - gPeiNtAutoScanPpiGuid # PPI ALWAYS_PRODUCED - gPeiNtThunkPpiGuid # PPI ALWAYS_PRODUCED - gEfiTemporaryRamSupportPpiGuid - -[Pcd] - gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode - gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareFdSize - gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain - gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareVolume - -[BuildOptions] - MSFT:*_*_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib - MSFT:*_VS2015_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib - MSFT:*_VS2015x86_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x86" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x86" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib - MSFT:*_*_IA32_CC_FLAGS == /nologo /W4 /WX /Gy /c /D UNICODE /Od /FIAutoGen.h /EHs-c- /GF /Gs8192 /Zi /Gm /D _CRT_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_DEPRECATE - MSFT:*_*_IA32_PP_FLAGS == /nologo /E /TC /FIAutoGen.h - MSFT:*_*_IA32_ASM_FLAGS == /nologo /W3 /WX /c /coff /Cx /Zd /W0 /Zi - MSFT:*_*_IA32_ASMLINK_FLAGS == /link /nologo /tiny - - MSFT:*_*_X64_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib\AMD64" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib - MSFT:*_VS2015_X64_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib\AMD64" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib - MSFT:*_VS2015x86_X64_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib\AMD64" /LIBPATH:"%UniversalCRTSdkDir%lib\%UCRTVersion%\ucrt\x64" /LIBPATH:"%WindowsSdkDir%lib\%WindowsSDKLibVersion%\um\x64" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:AMD64 /LTCG Kernel32.lib MSVCRTD.lib vcruntimed.lib ucrtd.lib Gdi32.lib User32.lib Winmm.lib Advapi32.lib - MSFT:*_*_X64_CC_FLAGS == /nologo /W4 /WX /Gy /c /D UNICODE /Od /FIAutoGen.h /EHs-c- /GF /Gs8192 /Zi /Gm /D _CRT_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_DEPRECATE - MSFT:*_*_X64_PP_FLAGS == /nologo /E /TC /FIAutoGen.h - MSFT:*_*_X64_ASM_FLAGS == /nologo /W3 /WX /c /Cx /Zd /W0 /Zi - MSFT:*_*_X64_ASMLINK_FLAGS == /link /nologo - - INTEL:*_*_IA32_DLINK_FLAGS == /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"C:\Program Files\Intel\Compiler\C++\9.1\IA32\Lib" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib - INTEL:*_*_IA32_CC_FLAGS == /nologo /W4 /WX /Gy /c /D UNICODE /Od /FIAutoGen.h /EHs-c- /GF /Gs8192 /Zi /Gm /D _CRT_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_DEPRECATE - INTEL:*_*_IA32_PP_FLAGS == /nologo /E /TC /FIAutoGen.h - INTEL:*_*_IA32_ASM_FLAGS == /nologo /W3 /WX /c /coff /Cx /Zd /W0 /Zi - INTEL:*_*_IA32_ASMLINK_FLAGS == /link /nologo /tiny diff --git a/Nt32Pkg/Sec/Stack.asm b/Nt32Pkg/Sec/Stack.asm deleted file mode 100644 index 7defff6bb1..0000000000 --- a/Nt32Pkg/Sec/Stack.asm +++ /dev/null @@ -1,94 +0,0 @@ -;------------------------------------------------------------------------------ -; -; Copyright (c) 2007, 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: -; -; Stack.asm -; -; Abstract: -; -; Switch the stack from temporary memory to permenent memory. -; -;------------------------------------------------------------------------------ - - .586p - .model flat,C - .code - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; SecSwitchStack ( -; UINT32 TemporaryMemoryBase, -; UINT32 PermenentMemoryBase -; ); -;------------------------------------------------------------------------------ -SecSwitchStack PROC - ; - ; Save three register: eax, ebx, ecx - ; - push eax - push ebx - push ecx - push edx - - ; - ; !!CAUTION!! this function address's is pushed into stack after - ; migration of whole temporary memory, so need save it to permenent - ; memory at first! - ; - - mov ebx, [esp + 20] ; Save the first parameter - mov ecx, [esp + 24] ; Save the second parameter - - ; - ; Save this function's return address into permenent memory at first. - ; Then, Fixup the esp point to permenent memory - ; - mov eax, esp - sub eax, ebx - add eax, ecx - mov edx, dword ptr [esp] ; copy pushed register's value to permenent memory - mov dword ptr [eax], edx - mov edx, dword ptr [esp + 4] - mov dword ptr [eax + 4], edx - mov edx, dword ptr [esp + 8] - mov dword ptr [eax + 8], edx - mov edx, dword ptr [esp + 12] - mov dword ptr [eax + 12], edx - mov edx, dword ptr [esp + 16] ; Update this function's return address into permenent memory - mov dword ptr [eax + 16], edx - mov esp, eax ; From now, esp is pointed to permenent memory - - ; - ; Fixup the ebp point to permenent memory - ; - mov eax, ebp - sub eax, ebx - add eax, ecx - mov ebp, eax ; From now, ebp is pointed to permenent memory - - ; - ; Fixup callee's ebp point for PeiDispatch - ; - mov eax, dword ptr [ebp] - sub eax, ebx - add eax, ecx - mov dword ptr [ebp], eax ; From now, Temporary's PPI caller's stack is in permenent memory - - pop edx - pop ecx - pop ebx - pop eax - ret -SecSwitchStack ENDP - - END diff --git a/Nt32Pkg/Sec/StackX64.asm b/Nt32Pkg/Sec/StackX64.asm deleted file mode 100644 index 2327e2eeac..0000000000 --- a/Nt32Pkg/Sec/StackX64.asm +++ /dev/null @@ -1,110 +0,0 @@ -;------------------------------------------------------------------------------ -; -; Copyright (c) 2013, 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: -; -; Stack.asm -; -; Abstract: -; -; Switch the stack from temporary memory to permenent memory. -; -;------------------------------------------------------------------------------ - - .code - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; SecSwitchStack ( -; UINT32 TemporaryMemoryBase, -; UINT32 PermenentMemoryBase -; ); -;------------------------------------------------------------------------------ -SecSwitchStack PROC - mov [rsp + 08h], rcx - mov [rsp + 10h], rdx - - ; - ; Save three register: eax, ebx, ecx - ; - push rax - push rbx - push rcx - push rdx - - ; - ; !!CAUTION!! this function address's is pushed into stack after - ; migration of whole temporary memory, so need save it to permenent - ; memory at first! - ; - - mov rbx, [rsp + 28h] ; Save the first parameter - mov rcx, [rsp + 30h] ; Save the second parameter - - ; - ; Save this function's return address into permenent memory at first. - ; Then, Fixup the esp point to permenent memory - ; - mov rax, rsp - sub rax, rbx - add rax, rcx - mov rdx, qword ptr [rsp] ; copy pushed register's value to permenent memory - mov qword ptr [rax], rdx - mov rdx, qword ptr [rsp + 8] - mov qword ptr [rax + 8], rdx - mov rdx, qword ptr [rsp + 10h] - mov qword ptr [rax + 10h], rdx - mov rdx, qword ptr [rsp + 18h] - mov qword ptr [rax + 18h], rdx - mov rdx, qword ptr [rsp + 20h] ; Update this function's return address into permenent memory - mov qword ptr [rax + 20h], rdx - mov rsp, rax ; From now, esp is pointed to permenent memory - - ; - ; Fixup the ebp point to permenent memory - ; - mov rax, rbp - sub rax, rbx - add rax, rcx - mov rbp, rax ; From now, ebp is pointed to permenent memory - - pop rdx - pop rcx - pop rbx - pop rax - ret -SecSwitchStack ENDP - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; PeiSwitchStacks ( -; IN SWITCH_STACK_ENTRY_POINT EntryPoint, -; IN VOID *Context1, OPTIONAL -; IN VOID *Context2, OPTIONAL -; IN VOID *Context3, OPTIONAL -; IN VOID *NewStack -; ) -;------------------------------------------------------------------------------ -PeiSwitchStacks PROC - mov rax, rcx - mov rcx, rdx - mov rdx, r8 - mov r8, r9 - mov rsp, [rsp + 28h] - sub rsp, 20h - call rax - jmp $ - ret -PeiSwitchStacks ENDP - - END diff --git a/Nt32Pkg/Sec/WinNtThunk.c b/Nt32Pkg/Sec/WinNtThunk.c deleted file mode 100644 index 3159ef483b..0000000000 --- a/Nt32Pkg/Sec/WinNtThunk.c +++ /dev/null @@ -1,187 +0,0 @@ -/**@file - -Copyright (c) 2006 - 2011, 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: - - WinNtThunk.c - -Abstract: - - Since the SEC is the only windows program in our emulation we - must use a Tiano mechanism to export Win32 APIs to other modules. - This is the role of the EFI_WIN_NT_THUNK_PROTOCOL. - - The mWinNtThunkTable exists so that a change to EFI_WIN_NT_THUNK_PROTOCOL - will cause an error in initializing the array if all the member functions - are not added. It looks like adding a element to end and not initializing - it may cause the table to be initaliized with the members at the end being - set to zero. This is bad as jumping to zero will case the NT32 to crash. - - All the member functions in mWinNtThunkTable are Win32 - API calls, so please reference Microsoft documentation. - - - gWinNt is a a public exported global that contains the initialized - data. - -**/ - -#include "SecMain.h" - -// -// This pragma is needed for all the DLL entry points to be asigned to the array. -// if warning 4232 is not dissabled a warning will be generated as a DLL entry -// point could be modified dynamically. The SEC does not do that, so we must -// disable the warning so we can compile the SEC. The previous method was to -// asign each element in code. The disadvantage to that approach is it's harder -// to tell if all the elements have been initialized properly. -// -#pragma warning(disable : 4232) -#pragma warning(disable : 4996) - -#if __INTEL_COMPILER -#pragma warning ( disable : 144 ) -#endif - -EFI_WIN_NT_THUNK_PROTOCOL mWinNtThunkTable = { - EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE, - GetProcAddress, - GetTickCount, - LoadLibraryEx, - FreeLibrary, - SetPriorityClass, - SetThreadPriority, - Sleep, - SuspendThread, - GetCurrentThread, - GetCurrentThreadId, - GetCurrentProcess, - CreateThread, - TerminateThread, - SendMessage, - ExitThread, - ResumeThread, - DuplicateHandle, - InitializeCriticalSection, - EnterCriticalSection, - LeaveCriticalSection, - DeleteCriticalSection, - TlsAlloc, - TlsFree, - TlsSetValue, - TlsGetValue, - CreateSemaphore, - WaitForSingleObject, - ReleaseSemaphore, - CreateConsoleScreenBuffer, - FillConsoleOutputAttribute, - FillConsoleOutputCharacter, - GetConsoleCursorInfo, - GetNumberOfConsoleInputEvents, - PeekConsoleInput, - ScrollConsoleScreenBuffer, - ReadConsoleInput, - SetConsoleActiveScreenBuffer, - SetConsoleCursorInfo, - SetConsoleCursorPosition, - SetConsoleScreenBufferSize, - SetConsoleTitleW, - WriteConsoleInput, - WriteConsoleOutput, - CreateFile, - DeviceIoControl, - CreateDirectory, - RemoveDirectory, - GetFileAttributes, - SetFileAttributes, - CreateFileMapping, - CloseHandle, - DeleteFile, - FindFirstFile, - FindNextFile, - FindClose, - FlushFileBuffers, - GetEnvironmentVariable, - GetLastError, - SetErrorMode, - GetStdHandle, - MapViewOfFileEx, - ReadFile, - SetEndOfFile, - SetFilePointer, - WriteFile, - GetFileInformationByHandle, - GetDiskFreeSpace, - GetDiskFreeSpaceEx, - MoveFile, - SetFileTime, - SystemTimeToFileTime, - LocalFileTimeToFileTime, - FileTimeToLocalFileTime, - FileTimeToSystemTime, - GetSystemTime, - SetSystemTime, - GetLocalTime, - SetLocalTime, - GetTimeZoneInformation, - SetTimeZoneInformation, - timeSetEvent, - timeKillEvent, - ClearCommError, - EscapeCommFunction, - GetCommModemStatus, - GetCommState, - SetCommState, - PurgeComm, - SetCommTimeouts, - ExitProcess, - _snwprintf, - GetDesktopWindow, - GetForegroundWindow, - CreateWindowEx, - ShowWindow, - UpdateWindow, - DestroyWindow, - InvalidateRect, - GetWindowDC, - GetClientRect, - AdjustWindowRect, - SetDIBitsToDevice, - BitBlt, - GetDC, - ReleaseDC, - RegisterClassEx, - UnregisterClass, - BeginPaint, - EndPaint, - PostQuitMessage, - DefWindowProc, - LoadIcon, - LoadCursor, - GetStockObject, - SetViewportOrgEx, - SetWindowOrgEx, - MoveWindow, - GetWindowRect, - GetMessage, - TranslateMessage, - DispatchMessage, - GetProcessHeap, - HeapAlloc, - HeapFree, - QueryPerformanceCounter, - QueryPerformanceFrequency -}; - -#pragma warning(default : 4996) -#pragma warning(default : 4232) - -EFI_WIN_NT_THUNK_PROTOCOL *gWinNt = &mWinNtThunkTable; -- cgit v1.2.3