Initial import.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
bbahnsen
2006-04-21 22:54:32 +00:00
commit 878ddf1fc3
2651 changed files with 624620 additions and 0 deletions

314
EdkNt32Pkg/Sec/FwVol.c Normal file
View 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_FVB_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;
}

1163
EdkNt32Pkg/Sec/SecMain.c Normal file

File diff suppressed because it is too large Load Diff

570
EdkNt32Pkg/Sec/SecMain.h Normal file
View File

@@ -0,0 +1,570 @@
/*++
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>
#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;

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<ModuleBuildDescription xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd">
<MbdHeader>
<BaseName>SecMain</BaseName>
<Guid>4b837b03-6587-4d19-b82b-edfad836c0a0</Guid>
<Version>0</Version>
<Description>FIX ME!</Description>
<Copyright>Copyright (c) 2004-2006, 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>
<Created>2006-03-14 17:04</Created>
<Modified>2006-03-19 15:17</Modified>
</MbdHeader>
<Libraries>
<Library>BaseLib</Library>
<Library>BaseMemoryLib</Library>
<Library>BasePeCoffLib</Library>
<Library>BasePrintLib</Library>
<Library>BaseReportStatusCodeLibNull</Library>
<Library>BaseDebugLibNull</Library>
</Libraries>
</ModuleBuildDescription>

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd">
<MsaHeader>
<BaseName>SecMain</BaseName>
<ModuleType>SEC</ModuleType>
<ComponentType>SEC</ComponentType>
<Guid>4b837b03-6587-4d19-b82b-edfad836c0a0</Guid>
<Version>0</Version>
<Abstract>Component description file for NT32 Sec.Warning the [sources.*] does not work like you think!If you add a file you need to update the makefile in the NT32 build tipSEC_OBJECTS needs to get the OBJ of the new C file added in.We keep [sources.*] synced up with SEC_OBJECTS so dependencies workproperly.Libraries.Common does not work you must update SEC_OBJECTS in the platformmakefile</Abstract>
<Description>FIX ME!</Description>
<Copyright>Copyright (c) 2004-2006, 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>0</Specification>
<Created>2006-03-14 17:04</Created>
<Updated>2006-03-19 15:17</Updated>
</MsaHeader>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_CONSUMED">PeCoffLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">BaseLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">BaseMemoryLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">PrintLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">ReportStatusCodeLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">PcdLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">DebugLib</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
<Filename>SecMain.c</Filename>
<Filename>FwVol.c</Filename>
<Filename>WinNtThunk.c</Filename>
<Filename>SecMain.h</Filename>
</SourceFiles>
<Includes>
<PackageName>MdePkg</PackageName>
<PackageName>EdkModulePkg</PackageName>
<PackageName>EdkNt32Pkg</PackageName>
</Includes>
<PPIs>
<Ppi Usage="ALWAYS_PRODUCED">NtThunk</Ppi>
<Ppi Usage="ALWAYS_PRODUCED">NtAutoScan</Ppi>
<Ppi Usage="ALWAYS_PRODUCED">NtFwh</Ppi>
<Ppi Usage="ALWAYS_PRODUCED">StatusCode</Ppi>
<Ppi Usage="ALWAYS_PRODUCED">NtPeiLoadFile</Ppi>
</PPIs>
<Guids>
<GuidEntry Usage="ALWAYS_PRODUCED">
<C_Name>PeiPeCoffLoader</C_Name>
</GuidEntry>
</Guids>
<Externs>
<Extern>
<ModuleEntryPoint></ModuleEntryPoint>
</Extern>
</Externs>
<PCDs>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdWinNtCpuSpeed</C_Name>
<Token>0x00001008</Token>
<DatumType>VOID*</DatumType>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdWinNtMemorySize</C_Name>
<Token>0x00001005</Token>
<DatumType>VOID*</DatumType>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdWinNtFirmwareVolume</C_Name>
<Token>0x00001009</Token>
<DatumType>VOID*</DatumType>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdWinNtBootMode</C_Name>
<Token>0x00001006</Token>
<DatumType>UINT32</DatumType>
</PcdData>
</PCDs>
<BuildOptions>
<Option>BUILD_TYPE=CUSTOM_BUILD</Option>
</BuildOptions>
</ModuleSurfaceArea>

View File

@@ -0,0 +1,154 @@
<?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">
<ant antfile="${WORKSPACE_DIR}\MdePkg\Library\BaseLib\build.xml" inheritAll="false" target="BaseLib">
<property name="WORKSPACE_DIR" value="${WORKSPACE_DIR}" />
<property name="PACKAGE_DIR" value="${WORKSPACE_DIR}\MdePkg/" />
<property name="ARCH" value="${ARCH}" />
<property name="TARGET" value="${TARGET}" />
<property name="PACKAGE" value="MdePkg" />
</ant>
<ant antfile="${WORKSPACE_DIR}\MdePkg\Library\BaseMemoryLib\build.xml" inheritAll="false" target="BaseMemoryLib">
<property name="WORKSPACE_DIR" value="${WORKSPACE_DIR}" />
<property name="PACKAGE_DIR" value="${WORKSPACE_DIR}\MdePkg/" />
<property name="ARCH" value="${ARCH}" />
<property name="TARGET" value="${TARGET}" />
<property name="PACKAGE" value="MdePkg" />
</ant>
<ant antfile="${WORKSPACE_DIR}\MdePkg\Library\BasePrintLib\build.xml" inheritAll="false" target="BasePrintLib">
<property name="WORKSPACE_DIR" value="${WORKSPACE_DIR}" />
<property name="PACKAGE_DIR" value="${WORKSPACE_DIR}\MdePkg/" />
<property name="ARCH" value="${ARCH}" />
<property name="TARGET" value="${TARGET}" />
<property name="PACKAGE" value="MdePkg" />
</ant>
<ant antfile="${WORKSPACE_DIR}\MdePkg\Library\BasePeCoffLib\build.xml" inheritAll="false" target="BasePeCoffLib">
<property name="WORKSPACE_DIR" value="${WORKSPACE_DIR}" />
<property name="PACKAGE_DIR" value="${WORKSPACE_DIR}\MdePkg/" />
<property name="ARCH" value="${ARCH}" />
<property name="TARGET" value="${TARGET}" />
<property name="PACKAGE" value="MdePkg" />
</ant>
<ant antfile="${WORKSPACE_DIR}\MdePkg\Library\BaseReportStatusCodeLibNull\build.xml" inheritAll="false" target="BaseReportStatusCodeLibNull">
<property name="WORKSPACE_DIR" value="${WORKSPACE_DIR}" />
<property name="PACKAGE_DIR" value="${WORKSPACE_DIR}\MdePkg/" />
<property name="ARCH" value="${ARCH}" />
<property name="TARGET" value="${TARGET}" />
<property name="PACKAGE" value="MdePkg" />
</ant>
<ant antfile="${WORKSPACE_DIR}\MdePkg\Library\BaseDebugLibNull\build.xml" inheritAll="false" target="BaseDebugLibNull">
<property name="WORKSPACE_DIR" value="${WORKSPACE_DIR}" />
<property name="PACKAGE_DIR" value="${WORKSPACE_DIR}\MdePkg/" />
<property name="ARCH" value="${ARCH}" />
<property name="TARGET" value="${TARGET}" />
<property name="PACKAGE" value="MdePkg" />
</ant>
<Expand />
</target>
<target name="sourcefiles">
<Build_AUTOGEN FILENAME="AutoGen" FILEPATH=".">
<EXTRA.INC>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include\${ARCH}"/>
<includepath path="${DEST_DIR_DEBUG}"/>
</EXTRA.INC>
</Build_AUTOGEN>
<Build_C_Code FILENAME="FwVol" FILEPATH=".">
<EXTRA.INC>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include\${ARCH}"/>
<includepath path="${DEST_DIR_DEBUG}"/>
</EXTRA.INC>
</Build_C_Code>
<Build_C_Code FILENAME="WinNtThunk" FILEPATH=".">
<EXTRA.INC>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include\${ARCH}"/>
<includepath path="${DEST_DIR_DEBUG}"/>
</EXTRA.INC>
</Build_C_Code>
<Build_C_Code FILENAME="SecMain" FILEPATH=".">
<EXTRA.INC>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\MdePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkModulePkg\Include\${ARCH}"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include"/>
<includepath path="${WORKSPACE_DIR}\EdkNt32Pkg\Include\${ARCH}"/>
<includepath path="${DEST_DIR_DEBUG}"/>
</EXTRA.INC>
</Build_C_Code>
</target>
<target name="sections" />
<target name="output" >
<echo message="##Entering Output!" />
<OnDependency>
<sourcefiles>
<file list="${OBJECTS}"/>
<file list="${LIBS}"/>
</sourcefiles>
<targetfiles>
<file name="${BIN_DIR}\SecMain.exe"/>
</targetfiles>
<sequential>
<shellscript shell="cmd.exe" tmpsuffix=".cmd">
<arg line="/c"/>
<arg line="call"/>
"${LINK}" /LIBPATH:"${env.MSVCDir}\Lib" /LIBPATH:"${env.MSVCDir}\PlatformSdk\Lib" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MsvcRt.lib Gdi32.lib User32.lib Winmm.lib ${OBJECTS} ${LIBS} /base:0x10000000 /out:${BIN_DIR}\SecMain.exe /pdb:${DEST_DIR_DEBUG}\SecMain.pdb
</shellscript>
</sequential>
</OnDependency>
<!--
<cc userdefine="on">
<command type="LINK">
<argument value="/LIBPATH:&quot;${env.MSVCDir}\Lib&quot; /LIBPATH:&quot;${env.MSVCDir}\PlatformSdk\Lib&quot;" />
<argument value="/NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG" />
<argument value="Kernel32.lib MsvcRt.lib Gdi32.lib User32.lib Winmm.lib" />
<argument value="${OBJECTS}" />
<argument value="${LIBS}" />
<argument value="/base:0x10000000 /out:${BIN_DIR}\SecMain.exe /pdb:${DEST_DIR_DEBUG}\SecMain.pdb" />
</command>
</cc>
-->
</target>
<target name="clean" ></target>
<target name="cleanAll"></target>
</project>

178
EdkNt32Pkg/Sec/WinNtThunk.c Normal file
View File

@@ -0,0 +1,178 @@
/*++
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)
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,
swprintf,
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 : 4232)
EFI_WIN_NT_THUNK_PROTOCOL *gWinNt = &mWinNtThunkTable;

47
EdkNt32Pkg/Sec/build.xml Normal file
View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?><!-- 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 basedir="." default="SecMain"><!--Apply external ANT tasks-->
<taskdef resource="GenBuild.tasks"/>
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<property environment="env"/>
<property name="WORKSPACE_DIR" value="${env.WORKSPACE}"/>
<import file="${WORKSPACE_DIR}\Tools\Conf\BuildMacro.xml"/><!--MODULE_RELATIVE PATH is relative to PACKAGE_DIR-->
<property name="MODULE_RELATIVE_PATH" value="Sec"/>
<property name="MODULE_DIR" value="${PACKAGE_DIR}\${MODULE_RELATIVE_PATH}"/>
<property name="COMMON_FILE" value="${WORKSPACE_DIR}\Tools\Conf\Common.xml"/>
<target name="SecMain">
<GenBuild baseName="SecMain" mbdFilename="${MODULE_DIR}\SecMain.mbd" msaFilename="${MODULE_DIR}\SecMain.msa"/>
</target>
<target depends="SecMain_clean" name="clean"/>
<target depends="SecMain_cleanall" name="cleanall"/>
<target name="SecMain_clean">
<OutputDirSetup baseName="SecMain" mbdFilename="${MODULE_DIR}\SecMain.mbd" msaFilename="${MODULE_DIR}\SecMain.msa"/>
<if>
<available file="${DEST_DIR_OUTPUT}\SecMain_build.xml"/>
<then>
<ant antfile="${DEST_DIR_OUTPUT}\SecMain_build.xml" target="clean"/>
</then>
</if>
<delete dir="${DEST_DIR_OUTPUT}" excludes="*.xml"/>
</target>
<target name="SecMain_cleanall">
<OutputDirSetup baseName="SecMain" mbdFilename="${MODULE_DIR}\SecMain.mbd" msaFilename="${MODULE_DIR}\SecMain.msa"/>
<if>
<available file="${DEST_DIR_OUTPUT}\SecMain_build.xml"/>
<then>
<ant antfile="${DEST_DIR_OUTPUT}\SecMain_build.xml" target="cleanall"/>
</then>
</if>
<delete dir="${DEST_DIR_OUTPUT}"/>
<delete dir="${DEST_DIR_DEBUG}"/>
<delete>
<fileset dir="${BIN_DIR}" includes="**SecMain*"/>
</delete>
</target>
</project>