mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-23 13:44:33 +02:00
Porting SecMain module for Nt32Pkg, but not enable PI, so it currently dependent on IntelFrameworkPkg temporary.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2998 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
53f320dc75
commit
2e19fd0ff6
@ -21,6 +21,13 @@
|
|||||||
#define _FRAMEWORK_PEI_H_
|
#define _FRAMEWORK_PEI_H_
|
||||||
|
|
||||||
#include <PiPei.h>
|
#include <PiPei.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINTN BootFirmwareVolume;
|
||||||
|
UINTN SizeOfCacheAsRam;
|
||||||
|
EFI_PEI_PPI_DESCRIPTOR *DispatchTable;
|
||||||
|
} EFI_PEI_STARTUP_DESCRIPTOR;
|
||||||
|
|
||||||
#include <Common/FrameworkFirmwareFileSystem.h>
|
#include <Common/FrameworkFirmwareFileSystem.h>
|
||||||
#include <Common/FrameworkHob.h>
|
#include <Common/FrameworkHob.h>
|
||||||
#include <Common/FrameworkLegacy16.h>
|
#include <Common/FrameworkLegacy16.h>
|
||||||
|
71
MdeModulePkg/Include/Guid/PeiPeCoffLoader.h
Normal file
71
MdeModulePkg/Include/Guid/PeiPeCoffLoader.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*++
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 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:
|
||||||
|
PeiPeCoffLoader.h
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
GUID for the PE/COFF Loader APIs shared between PEI and DXE
|
||||||
|
|
||||||
|
--*/
|
||||||
|
|
||||||
|
#ifndef __PEI_PE_COFF_LOADER_H__
|
||||||
|
#define __PEI_PE_COFF_LOADER_H__
|
||||||
|
|
||||||
|
//
|
||||||
|
// MdePkg/Include/Common/PeCoffLoaderImageContext.h
|
||||||
|
//
|
||||||
|
#include <Library/PeCoffLib.h>
|
||||||
|
|
||||||
|
#define EFI_PEI_PE_COFF_LOADER_GUID \
|
||||||
|
{ 0xd8117cff, 0x94a6, 0x11d4, {0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
|
||||||
|
|
||||||
|
typedef struct _EFI_PEI_PE_COFF_LOADER_PROTOCOL EFI_PEI_PE_COFF_LOADER_PROTOCOL;
|
||||||
|
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_PEI_PE_COFF_LOADER_GET_IMAGE_INFO) (
|
||||||
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
||||||
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_PEI_PE_COFF_LOADER_LOAD_IMAGE) (
|
||||||
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
||||||
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_PEI_PE_COFF_LOADER_RELOCATE_IMAGE) (
|
||||||
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
||||||
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_PEI_PE_COFF_LOADER_UNLOAD_IMAGE) (
|
||||||
|
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
|
||||||
|
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
|
);
|
||||||
|
|
||||||
|
struct _EFI_PEI_PE_COFF_LOADER_PROTOCOL {
|
||||||
|
EFI_PEI_PE_COFF_LOADER_GET_IMAGE_INFO GetImageInfo;
|
||||||
|
EFI_PEI_PE_COFF_LOADER_LOAD_IMAGE LoadImage;
|
||||||
|
EFI_PEI_PE_COFF_LOADER_RELOCATE_IMAGE RelocateImage;
|
||||||
|
EFI_PEI_PE_COFF_LOADER_UNLOAD_IMAGE UnloadImage;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern EFI_GUID gEfiPeiPeCoffLoaderGuid;
|
||||||
|
|
||||||
|
#endif
|
@ -64,7 +64,8 @@
|
|||||||
gPcdPeiCallbackFnTableHobGuid = { 0xC625F4B2, 0xEA09, 0x4675, { 0x82, 0xD7, 0xBA, 0x36, 0x82, 0x15, 0x7A, 0x14 }}
|
gPcdPeiCallbackFnTableHobGuid = { 0xC625F4B2, 0xEA09, 0x4675, { 0x82, 0xD7, 0xBA, 0x36, 0x82, 0x15, 0x7A, 0x14 }}
|
||||||
gPcdDataBaseHobGuid = { 0xEA296D92, 0x0B69, 0x423C, { 0x8C, 0x28, 0x33, 0xB4, 0xE0, 0xA9, 0x12, 0x68 }}
|
gPcdDataBaseHobGuid = { 0xEA296D92, 0x0B69, 0x423C, { 0x8C, 0x28, 0x33, 0xB4, 0xE0, 0xA9, 0x12, 0x68 }}
|
||||||
gEfiMdePkgTokenSpaceGuid = { 0xA1AFF049, 0xFDEB, 0x442a, { 0xB3, 0x20, 0x13, 0xAB, 0x4C, 0xB7, 0x2B, 0xBC }}
|
gEfiMdePkgTokenSpaceGuid = { 0xA1AFF049, 0xFDEB, 0x442a, { 0xB3, 0x20, 0x13, 0xAB, 0x4C, 0xB7, 0x2B, 0xBC }}
|
||||||
|
##gEfiPeiPeCoffLoaderGuid will be removed in future
|
||||||
|
gEfiPeiPeCoffLoaderGuid = { 0xd8117cff, 0x94a6, 0x11d4, {0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
|
@ -30,6 +30,22 @@ typedef union {
|
|||||||
} EFI_FFS_INTEGRITY_CHECK;
|
} EFI_FFS_INTEGRITY_CHECK;
|
||||||
|
|
||||||
typedef UINT8 EFI_FV_FILETYPE;
|
typedef UINT8 EFI_FV_FILETYPE;
|
||||||
|
|
||||||
|
#define EFI_FV_FILETYPE_ALL 0x00
|
||||||
|
#define EFI_FV_FILETYPE_RAW 0x01
|
||||||
|
#define EFI_FV_FILETYPE_FREEFORM 0x02
|
||||||
|
#define EFI_FV_FILETYPE_SECURITY_CORE 0x03
|
||||||
|
#define EFI_FV_FILETYPE_PEI_CORE 0x04
|
||||||
|
#define EFI_FV_FILETYPE_DXE_CORE 0x05
|
||||||
|
#define EFI_FV_FILETYPE_PEIM 0x06
|
||||||
|
#define EFI_FV_FILETYPE_DRIVER 0x07
|
||||||
|
#define EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER 0x08
|
||||||
|
#define EFI_FV_FILETYPE_APPLICATION 0x09
|
||||||
|
//
|
||||||
|
// File type 0x0A is reserved and should not be used
|
||||||
|
//
|
||||||
|
#define EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE 0x0B
|
||||||
|
|
||||||
typedef UINT8 EFI_FFS_FILE_ATTRIBUTES;
|
typedef UINT8 EFI_FFS_FILE_ATTRIBUTES;
|
||||||
typedef UINT8 EFI_FFS_FILE_STATE;
|
typedef UINT8 EFI_FFS_FILE_STATE;
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
gEfiWinNtPhysicalDisksGuid = { 0x0C95A92F, 0xA006, 0x11D4, { 0xBC, 0xFA, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81 }}
|
gEfiWinNtPhysicalDisksGuid = { 0x0C95A92F, 0xA006, 0x11D4, { 0xBC, 0xFA, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81 }}
|
||||||
gEfiWinNtVirtualDisksGuid = { 0x0C95A928, 0xA006, 0x11D4, { 0xBC, 0xFA, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81 }}
|
gEfiWinNtVirtualDisksGuid = { 0x0C95A928, 0xA006, 0x11D4, { 0xBC, 0xFA, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81 }}
|
||||||
gEfiNt32PkgTokenSpaceGuid = { 0x0D79A645, 0x1D91, 0x40a6, { 0xA8, 0x1F, 0x61, 0xE6, 0x98, 0x2B, 0x32, 0xB4 }}
|
gEfiNt32PkgTokenSpaceGuid = { 0x0D79A645, 0x1D91, 0x40a6, { 0xA8, 0x1F, 0x61, 0xE6, 0x98, 0x2B, 0x32, 0xB4 }}
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
@ -93,7 +93,9 @@
|
|||||||
gPeiNtThunkPpiGuid = { 0x98c281e5, 0xf906, 0x43dd, { 0xa9, 0x2b, 0xb0, 0x03, 0xbf, 0x27, 0x65, 0xda }}
|
gPeiNtThunkPpiGuid = { 0x98c281e5, 0xf906, 0x43dd, { 0xa9, 0x2b, 0xb0, 0x03, 0xbf, 0x27, 0x65, 0xda }}
|
||||||
gPeiNtAutoScanPpiGuid = { 0x0dce384d, 0x007c, 0x4ba5, { 0x94, 0xbd, 0x0f, 0x6e, 0xb6, 0x4d, 0x2a, 0xa9 }}
|
gPeiNtAutoScanPpiGuid = { 0x0dce384d, 0x007c, 0x4ba5, { 0x94, 0xbd, 0x0f, 0x6e, 0xb6, 0x4d, 0x2a, 0xa9 }}
|
||||||
gEfiPeiMemoryDiscoveredPpiGuid = { 0xF894643D, 0xC449, 0x42D1, { 0x8E, 0xA8, 0x85, 0xBD, 0xD8, 0xC6, 0x5B, 0xDE }}
|
gEfiPeiMemoryDiscoveredPpiGuid = { 0xF894643D, 0xC449, 0x42D1, { 0x8E, 0xA8, 0x85, 0xBD, 0xD8, 0xC6, 0x5B, 0xDE }}
|
||||||
|
gNtPeiLoadFilePpiGuid = { 0xfd0c65eb, 0x0405, 0x4cd2, { 0x8a, 0xee, 0xf4, 0x0, 0xef, 0x13, 0xba, 0xc2 }}
|
||||||
|
gNtFwhPpiGuid = { 0x4e76928f, 0x50ad, 0x4334, {0xb0, 0x6b, 0xa8, 0x42, 0x13, 0x10, 0x8a, 0x57 }}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
# PCD Declarations section - list of all PCDs Declared by this Package
|
# PCD Declarations section - list of all PCDs Declared by this Package
|
||||||
|
@ -212,8 +212,8 @@
|
|||||||
PcdStatusCodeRuntimeMemorySize|gEfiIntelFrameworkModulePkgTokenSpaceGuid|128
|
PcdStatusCodeRuntimeMemorySize|gEfiIntelFrameworkModulePkgTokenSpaceGuid|128
|
||||||
|
|
||||||
[PcdsFixedAtBuild.IA32]
|
[PcdsFixedAtBuild.IA32]
|
||||||
PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|VOID*|10
|
PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|10
|
||||||
PcdWinNtFirmwareVolume|gEfiNt32PkgTokenSpaceGuid|L"..\\Fv\\Fv_Recovery.fd"|VOID*|52
|
PcdWinNtFirmwareVolume|gEfiNt32PkgTokenSpaceGuid|L"..\\Fv\\Fv_Recovery.fd"|52
|
||||||
PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1
|
PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1
|
||||||
PcdMaximumUnicodeStringLength|gEfiMdePkgTokenSpaceGuid|1000000
|
PcdMaximumUnicodeStringLength|gEfiMdePkgTokenSpaceGuid|1000000
|
||||||
PcdMaximumAsciiStringLength|gEfiMdePkgTokenSpaceGuid|1000000
|
PcdMaximumAsciiStringLength|gEfiMdePkgTokenSpaceGuid|1000000
|
||||||
@ -351,3 +351,4 @@
|
|||||||
$(WORKSPACE)/IntelFrameworkModulePkg/Universal/DriverSampleDxe/DriverSample.inf
|
$(WORKSPACE)/IntelFrameworkModulePkg/Universal/DriverSampleDxe/DriverSample.inf
|
||||||
$(WORKSPACE)/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.inf ##This driver follows UEFI specification definition
|
$(WORKSPACE)/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.inf ##This driver follows UEFI specification definition
|
||||||
$(WORKSPACE)/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.inf ##This driver follows UEFI specification definition
|
$(WORKSPACE)/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.inf ##This driver follows UEFI specification definition
|
||||||
|
$(WORKSPACE)/Nt32Pkg/Sec/SecMain.inf
|
314
Nt32Pkg/Sec/FwVol.c
Normal file
314
Nt32Pkg/Sec/FwVol.c
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
/*++
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
74
Nt32Pkg/Sec/Makefile
Normal file
74
Nt32Pkg/Sec/Makefile
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
SOURCE_FILES = $(DEBUG_DIR)\AutoGen.c \
|
||||||
|
$(MODULE_DIR)\Nt32Pkg\Sec\WinNtThunk.c \
|
||||||
|
$(MODULE_DIR)\Nt32Pkg\Sec\FwVol.c \
|
||||||
|
$(MODULE_DIR)\Nt32Pkg\Sec\SecMain.c
|
||||||
|
|
||||||
|
INC = -I$(WORKSPACE)\Nt32Pkg\Sec \
|
||||||
|
-I$(DEBUG_DIR) \
|
||||||
|
-I$(WORKSPACE)\Nt32Pkg \
|
||||||
|
-I$(WORKSPACE)\Nt32Pkg\Include \
|
||||||
|
-I$(WORKSPACE)\MdePkg \
|
||||||
|
-I$(WORKSPACE)\MdePkg\Include\Ia32 \
|
||||||
|
-I$(WORKSPACE)\MdePkg\Include \
|
||||||
|
-I$(WORKSPACE)\MdeModulePkg\Include \
|
||||||
|
-I$(WORKSPACE)\IntelFrameworkPkg\Include
|
||||||
|
|
||||||
|
OBJECTS = $(OUTPUT_DIR)\.\AutoGen.obj \
|
||||||
|
$(OUTPUT_DIR)\.\WinNtThunk.obj \
|
||||||
|
$(OUTPUT_DIR)\.\FwVol.obj \
|
||||||
|
$(OUTPUT_DIR)\.\SecMain.obj
|
||||||
|
|
||||||
|
LIBS = $(LIB_DIR)\BaseDebugLibNull.lib \
|
||||||
|
$(LIB_DIR)\BasePrintLib.lib \
|
||||||
|
$(LIB_DIR)\BaseMemoryLib.lib \
|
||||||
|
$(LIB_DIR)\BaseLib.lib \
|
||||||
|
$(LIB_DIR)\BasePeCoffLib.lib
|
||||||
|
|
||||||
|
MSVS_LINK_LIBPATHS = /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib"
|
||||||
|
LINK_FLAGS_EXE = /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG \
|
||||||
|
Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib
|
||||||
|
|
||||||
|
COMMON_DEPS = $(DEBUG_DIR)\AutoGen.h
|
||||||
|
|
||||||
|
all : $(BIN_DIR)\SecMain.exe
|
||||||
|
|
||||||
|
$(BIN_DIR)\SecMain.exe : $(OBJECTS)
|
||||||
|
"$(DLINK)" \
|
||||||
|
$(MSVS_LINK_LIBPATHS) \
|
||||||
|
$(LINK_FLAGS_EXE) \
|
||||||
|
$(OBJECTS) \
|
||||||
|
$(LIBS) \
|
||||||
|
/base:0x10000000 \
|
||||||
|
/out:"$(BIN_DIR)\SecMain.exe" \
|
||||||
|
/pdb:"$(BIN_DIR)\SecMain.pdb"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Individual Object Build Targets
|
||||||
|
#
|
||||||
|
$(OUTPUT_DIR)\.\AutoGen.obj : $(COMMON_DEPS)
|
||||||
|
$(OUTPUT_DIR)\.\AutoGen.obj : $(DEBUG_DIR)\AutoGen.c
|
||||||
|
"$(CC)" $(CC_FLAGS) $(INC) /Fo$@ $(DEBUG_DIR)\AutoGen.c
|
||||||
|
|
||||||
|
$(OUTPUT_DIR)\.\WinNtThunk.obj : $(COMMON_DEPS)
|
||||||
|
$(OUTPUT_DIR)\.\WinNtThunk.obj : $(MODULE_DIR)\WinNtThunk.c
|
||||||
|
"$(CC)" $(CC_FLAGS) $(INC) /Fo$@ $(MODULE_DIR)\WinNtThunk.c
|
||||||
|
|
||||||
|
$(OUTPUT_DIR)\.\FwVol.obj : $(COMMON_DEPS)
|
||||||
|
$(OUTPUT_DIR)\.\FwVol.obj : $(MODULE_DIR)\FwVol.c
|
||||||
|
"$(CC)" $(CC_FLAGS) $(INC) /Fo$@ $(MODULE_DIR)\FwVol.c
|
||||||
|
|
||||||
|
$(OUTPUT_DIR)\.\SecMain.obj : $(COMMON_DEPS)
|
||||||
|
$(OUTPUT_DIR)\.\SecMain.obj : $(MODULE_DIR)\SecMain.c
|
||||||
|
"$(CC)" $(CC_FLAGS) $(INC) /Fo$@ $(MODULE_DIR)\SecMain.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- @if exist $(DEBUG_DIR)\AutoGen.c del $(DEBUG_DIR)\AutoGen.c > NUL
|
||||||
|
del $(DEBUG_DIR)\AutoGen.h > NUL
|
||||||
|
del $(OUTPUT_DIR)\.\*.obj > NUL
|
||||||
|
del $(MODULE_BUILD_DIR)\makefile > NUL
|
||||||
|
del $(MODULE_BUILD_DIR)\*.idb > NUL
|
||||||
|
del $(MODULE_BUILD_DIR)\*.pdb > NUL
|
||||||
|
del $(BIN_DIR)\SecMain.exe > NUL
|
||||||
|
del $(BIN_DIR)\SecMain.pdb > NUL
|
||||||
|
|
||||||
|
|
1236
Nt32Pkg/Sec/SecMain.c
Normal file
1236
Nt32Pkg/Sec/SecMain.c
Normal file
File diff suppressed because it is too large
Load Diff
585
Nt32Pkg/Sec/SecMain.h
Normal file
585
Nt32Pkg/Sec/SecMain.h
Normal file
@ -0,0 +1,585 @@
|
|||||||
|
/*++
|
||||||
|
|
||||||
|
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 <FrameworkPei.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>
|
||||||
|
|
||||||
|
#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 EFI_PEI_SERVICES **PeiServices,
|
||||||
|
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||||
|
IN EFI_STATUS_CODE_VALUE Value,
|
||||||
|
IN UINT32 Instance,
|
||||||
|
IN EFI_GUID * CallerId,
|
||||||
|
IN EFI_STATUS_CODE_DATA * Data OPTIONAL
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
TODO: Add function description
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
PeiServices - TODO: add argument description
|
||||||
|
CodeType - TODO: add argument description
|
||||||
|
Value - TODO: add argument description
|
||||||
|
Instance - TODO: add argument description
|
||||||
|
CallerId - TODO: add argument description
|
||||||
|
Data - TODO: add argument description
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
TODO: add return values
|
||||||
|
|
||||||
|
--*/
|
||||||
|
;
|
||||||
|
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
main (
|
||||||
|
IN INTN Argc,
|
||||||
|
IN CHAR8 **Argv,
|
||||||
|
IN CHAR8 **Envp
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
TODO: Add function description
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
Argc - TODO: add argument description
|
||||||
|
Argv - TODO: add argument description
|
||||||
|
Envp - TODO: add argument description
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
TODO: add return values
|
||||||
|
|
||||||
|
--*/
|
||||||
|
;
|
||||||
|
|
||||||
|
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;
|
137
Nt32Pkg/Sec/SecMain.inf
Normal file
137
Nt32Pkg/Sec/SecMain.inf
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#/** @file
|
||||||
|
# Entry Point of NT32 Emulator
|
||||||
|
#
|
||||||
|
# Main executable file of NT32 Emulator that loads PEI core after initialization finished.
|
||||||
|
# Copyright (c) 2007 - 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.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#**/
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Defines Section - statements that will be processed to create a Makefile.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x00010005
|
||||||
|
BASE_NAME = SecMain
|
||||||
|
FILE_GUID = 4b837b03-6587-4d19-b82b-edfad836c0a0
|
||||||
|
MODULE_TYPE = SEC
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
EDK_RELEASE_VERSION = 0x00020000
|
||||||
|
EFI_SPECIFICATION_VERSION = 0x00020000
|
||||||
|
CUSTOM_MAKEFILE = MSFT|Makefile
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following information is for reference only and not required by the build tools.
|
||||||
|
#
|
||||||
|
# VALID_ARCHITECTURES = IA32
|
||||||
|
#
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Sources Section - list of files that are required for the build to succeed.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Sources.common]
|
||||||
|
OldDefinition.h
|
||||||
|
SecMain.h
|
||||||
|
WinNtThunk.c
|
||||||
|
FwVol.c
|
||||||
|
SecMain.c
|
||||||
|
SecMain_build.xml
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Includes Section - list of Include locations that are required for
|
||||||
|
# this module.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Includes]
|
||||||
|
$(WORKSPACE)/MdePkg/Include/Library
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Package Dependency Section - list of Package files that are required for
|
||||||
|
# this module.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
Nt32Pkg/Nt32Pkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
IntelFrameworkPkg/IntelFrameworkPkg.dec
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Library Class Section - list of Library Classes that are required for
|
||||||
|
# this module.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
DebugLib
|
||||||
|
PcdLib
|
||||||
|
PrintLib
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseLib
|
||||||
|
PeCoffLib
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Guid C Name Section - list of Guids that this module uses or produces.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEfiPeiPeCoffLoaderGuid # ALWAYS_PRODUCED
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# PPI C Name Section - list of PPI and PPI Notify C Names that this module
|
||||||
|
# uses or produces.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Ppis]
|
||||||
|
gNtPeiLoadFilePpiGuid # PPI ALWAYS_PRODUCED
|
||||||
|
gEfiPeiStatusCodePpiGuid # PPI ALWAYS_PRODUCED
|
||||||
|
gNtFwhPpiGuid # PPI ALWAYS_PRODUCED
|
||||||
|
gPeiNtAutoScanPpiGuid # PPI ALWAYS_PRODUCED
|
||||||
|
gPeiNtThunkPpiGuid # PPI ALWAYS_PRODUCED
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Pcd FIXED_AT_BUILD - list of PCDs that this module is coded for.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[PcdsFixedAtBuild.common]
|
||||||
|
PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Pcd DYNAMIC - list of PCDs that this module is coded for.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[PcdsDynamic.common]
|
||||||
|
#PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid
|
||||||
|
#PcdWinNtFirmwareVolume|gEfiNt32PkgTokenSpaceGuid
|
||||||
|
|
||||||
|
|
112
Nt32Pkg/Sec/SecMain.msa
Normal file
112
Nt32Pkg/Sec/SecMain.msa
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>SecMain</ModuleName>
|
||||||
|
<ModuleType>SEC</ModuleType>
|
||||||
|
<GuidValue>4b837b03-6587-4d19-b82b-edfad836c0a0</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Entry Point of NT32 Emulator</Abstract>
|
||||||
|
<Description>Main executable file of NT32 Emulator that loads PEI core after initialization finished.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006 - 2007, Intel Corporation</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>SecMain</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PeCoffLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseMemoryLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PrintLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PcdLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename ToolCode="DUMMY">SecMain_build.xml</Filename>
|
||||||
|
<Filename>SecMain.c</Filename>
|
||||||
|
<Filename>FwVol.c</Filename>
|
||||||
|
<Filename>WinNtThunk.c</Filename>
|
||||||
|
<Filename>SecMain.h</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>
|
||||||
|
<Package PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<PPIs>
|
||||||
|
<Ppi Usage="ALWAYS_PRODUCED">
|
||||||
|
<PpiCName>gPeiNtThunkPpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
<Ppi Usage="ALWAYS_PRODUCED">
|
||||||
|
<PpiCName>gPeiNtAutoScanPpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
<Ppi Usage="ALWAYS_PRODUCED">
|
||||||
|
<PpiCName>gNtFwhPpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
<Ppi Usage="ALWAYS_PRODUCED">
|
||||||
|
<PpiCName>gEfiPeiStatusCodePpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
<Ppi Usage="ALWAYS_PRODUCED">
|
||||||
|
<PpiCName>gNtPeiLoadFilePpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
</PPIs>
|
||||||
|
<Guids>
|
||||||
|
<GuidCNames Usage="ALWAYS_PRODUCED">
|
||||||
|
<GuidCName>gEfiPeiPeCoffLoaderGuid</GuidCName>
|
||||||
|
</GuidCNames>
|
||||||
|
</Guids>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
</Externs>
|
||||||
|
<PcdCoded>
|
||||||
|
<PcdEntry PcdItemType="DYNAMIC">
|
||||||
|
<C_Name>PcdWinNtMemorySizeForSecMain</C_Name>
|
||||||
|
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||||
|
<HelpText>This PCD defines the memory size of simulated machine. Simulator will allocate
|
||||||
|
the size of PcdWinNtMemorySizeForSecMain in windows platform.</HelpText>
|
||||||
|
</PcdEntry>
|
||||||
|
<PcdEntry PcdItemType="DYNAMIC">
|
||||||
|
<C_Name>PcdWinNtFirmwareVolume</C_Name>
|
||||||
|
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||||
|
<HelpText>This PCD defines the FD file windows path string. Simulator will load the FD file and execute.</HelpText>
|
||||||
|
</PcdEntry>
|
||||||
|
<PcdEntry PcdItemType="FIXED_AT_BUILD">
|
||||||
|
<C_Name>PcdWinNtBootMode</C_Name>
|
||||||
|
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||||
|
<HelpText>This PCD defines the boot mode for simualtor.
|
||||||
|
The boot mode can be set as following value:
|
||||||
|
0x0: Boot with full configuration.
|
||||||
|
0x1: Boot with minimal configuration.
|
||||||
|
0x2: Boot assume no configuration changes.
|
||||||
|
0x3: Boot with full configuration plus diagnostics.
|
||||||
|
0x4: Boot with default settings.
|
||||||
|
0x5: Boot on S4 resume.
|
||||||
|
0x6: Boot on S5 resume.
|
||||||
|
0x10: Boot on S2 resume.
|
||||||
|
0x11: Boot on S3 resume.
|
||||||
|
0x12: Boot on flash update.
|
||||||
|
0x20: Boot in reovery mode.</HelpText>
|
||||||
|
</PcdEntry>
|
||||||
|
</PcdCoded>
|
||||||
|
</ModuleSurfaceArea>
|
141
Nt32Pkg/Sec/SecMain_build.xml
Normal file
141
Nt32Pkg/Sec/SecMain_build.xml
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<project name="SecMain" default="main" basedir="." >
|
||||||
|
<!-- Apply external ANT task -->
|
||||||
|
<taskdef resource="frameworktasks.tasks" />
|
||||||
|
<taskdef resource="cpptasks.tasks" />
|
||||||
|
<typedef resource="cpptasks.types" />
|
||||||
|
<taskdef resource="net/sf/antcontrib/antlib.xml" />
|
||||||
|
<property environment="env" />
|
||||||
|
<!-- All Properties -->
|
||||||
|
<property name="BASE_NAME" value="SecMain" />
|
||||||
|
|
||||||
|
<!-- Default target -->
|
||||||
|
<target name="main" depends="libraries, sourcefiles, sections, output" />
|
||||||
|
<!-- Compile all dependency Library instances. -->
|
||||||
|
|
||||||
|
<target name="libraries">
|
||||||
|
<GenBuild type="build">
|
||||||
|
<property name="ARCH" value="${ARCH}"/>
|
||||||
|
<property name="MODULE_GUID" value="27d67720-ea68-48ae-93da-a3a074c90e30"/>
|
||||||
|
<property name="MODULE_VERSION" value=""/>
|
||||||
|
<property name="PLATFORM" value="${PLATFORM}"/>
|
||||||
|
<property name="PACKAGE_GUID" value="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<property name="PACKAGE_VERSION" value=""/>
|
||||||
|
</GenBuild>
|
||||||
|
<GenBuild type="build">
|
||||||
|
<property name="ARCH" value="${ARCH}"/>
|
||||||
|
<property name="MODULE_GUID" value="fd44e603-002a-4b29-9f5f-529e815b6165"/>
|
||||||
|
<property name="MODULE_VERSION" value=""/>
|
||||||
|
<property name="PLATFORM" value="${PLATFORM}"/>
|
||||||
|
<property name="PACKAGE_GUID" value="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<property name="PACKAGE_VERSION" value=""/>
|
||||||
|
</GenBuild>
|
||||||
|
<GenBuild type="build">
|
||||||
|
<property name="ARCH" value="${ARCH}"/>
|
||||||
|
<property name="MODULE_GUID" value="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3"/>
|
||||||
|
<property name="MODULE_VERSION" value=""/>
|
||||||
|
<property name="PLATFORM" value="${PLATFORM}"/>
|
||||||
|
<property name="PACKAGE_GUID" value="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<property name="PACKAGE_VERSION" value=""/>
|
||||||
|
</GenBuild>
|
||||||
|
<GenBuild type="build">
|
||||||
|
<property name="ARCH" value="${ARCH}"/>
|
||||||
|
<property name="MODULE_GUID" value="556f5d10-7309-4af4-b80a-8196bd60946f"/>
|
||||||
|
<property name="MODULE_VERSION" value=""/>
|
||||||
|
<property name="PLATFORM" value="${PLATFORM}"/>
|
||||||
|
<property name="PACKAGE_GUID" value="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<property name="PACKAGE_VERSION" value=""/>
|
||||||
|
</GenBuild>
|
||||||
|
<GenBuild type="build">
|
||||||
|
<property name="ARCH" value="${ARCH}"/>
|
||||||
|
<property name="MODULE_GUID" value="9ba1d976-0624-41a3-8650-28165e8d9ae8"/>
|
||||||
|
<property name="MODULE_VERSION" value=""/>
|
||||||
|
<property name="PLATFORM" value="${PLATFORM}"/>
|
||||||
|
<property name="PACKAGE_GUID" value="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<property name="PACKAGE_VERSION" value=""/>
|
||||||
|
</GenBuild>
|
||||||
|
</target>
|
||||||
|
<target name="sourcefiles">
|
||||||
|
<Build_Init>
|
||||||
|
<EXTRA.INC>
|
||||||
|
<includepath path="${INCLUDE_PATHS}"/>
|
||||||
|
</EXTRA.INC>
|
||||||
|
</Build_Init>
|
||||||
|
<Build_AUTOGEN FILEEXT="c" FILENAME="AutoGen" FILEPATH=".">
|
||||||
|
<EXTRA.INC>
|
||||||
|
<includepath path="${INCLUDE_PATHS}"/>
|
||||||
|
</EXTRA.INC>
|
||||||
|
</Build_AUTOGEN>
|
||||||
|
<Build_CCode FILEEXT="c" FILENAME="FwVol" FILEPATH=".">
|
||||||
|
<EXTRA.INC>
|
||||||
|
<includepath path="${INCLUDE_PATHS}"/>
|
||||||
|
</EXTRA.INC>
|
||||||
|
</Build_CCode>
|
||||||
|
<Build_CCode FILEEXT="c" FILENAME="WinNtThunk" FILEPATH=".">
|
||||||
|
<EXTRA.INC>
|
||||||
|
<includepath path="${INCLUDE_PATHS}"/>
|
||||||
|
</EXTRA.INC>
|
||||||
|
</Build_CCode>
|
||||||
|
<Build_CCode FILEEXT="c" FILENAME="SecMain" FILEPATH=".">
|
||||||
|
<EXTRA.INC>
|
||||||
|
<includepath path="${INCLUDE_PATHS}"/>
|
||||||
|
</EXTRA.INC>
|
||||||
|
</Build_CCode>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="sections" />
|
||||||
|
|
||||||
|
<target name="output" >
|
||||||
|
<if>
|
||||||
|
<available type="file" file="${DEST_DIR_OUTPUT}/AutoGen.h.obj"/>
|
||||||
|
<then>
|
||||||
|
<var name="SLINK_FLAGS" value="${SLINK_FLAGS} ${DEST_DIR_OUTPUT}/AutoGen.h.obj"/>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
<OnDependency>
|
||||||
|
<sourcefiles>
|
||||||
|
<fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" />
|
||||||
|
<file list="${LIBS}"/>
|
||||||
|
</sourcefiles>
|
||||||
|
<targetfiles>
|
||||||
|
<file name="${BIN_DIR}\SecMain.exe"/>
|
||||||
|
</targetfiles>
|
||||||
|
|
||||||
|
<sequential>
|
||||||
|
<cc userdefine="on">
|
||||||
|
<command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}"
|
||||||
|
outputFile="${DEST_DIR_OUTPUT}/SecMainLocal.lib" dpath="${SLINK_DPATH}">
|
||||||
|
|
||||||
|
<argument value="${SLINK_FLAGS}"/>
|
||||||
|
|
||||||
|
<fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}"/>
|
||||||
|
</command>
|
||||||
|
</cc>
|
||||||
|
|
||||||
|
<var name="LIBS" value="${LIBS} ${DEST_DIR_OUTPUT}/SecMainLocal.lib" />
|
||||||
|
|
||||||
|
<shellscript shell="cmd.exe" tmpsuffix=".cmd" >
|
||||||
|
<arg line="/q"/>
|
||||||
|
<arg line="/c"/>
|
||||||
|
<arg line="call"/>
|
||||||
|
PATH ${DLINK_DPATH};%path%
|
||||||
|
"${DLINK}" /LIBPATH:"${env.MSVCDir}\Lib" /LIBPATH:"${env.MSVCDir}\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 ${LIBS} /base:0x10000000 /out:${BIN_DIR}\SecMain.exe /pdb:${DEST_DIR_DEBUG}\SecMain.pdb
|
||||||
|
</shellscript>
|
||||||
|
</sequential>
|
||||||
|
</OnDependency>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="clean" ></target>
|
||||||
|
|
||||||
|
<target name="cleanAll"></target>
|
||||||
|
</project>
|
180
Nt32Pkg/Sec/WinNtThunk.c
Normal file
180
Nt32Pkg/Sec/WinNtThunk.c
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
/*++
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
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 initailized properly.
|
||||||
|
//
|
||||||
|
#pragma warning(disable : 4232)
|
||||||
|
#pragma warning(disable : 4996)
|
||||||
|
|
||||||
|
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,
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma warning(default : 4996)
|
||||||
|
#pragma warning(default : 4232)
|
||||||
|
|
||||||
|
EFI_WIN_NT_THUNK_PROTOCOL *gWinNt = &mWinNtThunkTable;
|
Loading…
x
Reference in New Issue
Block a user