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:
314
EdkNt32Pkg/Sec/FwVol.c
Normal file
314
EdkNt32Pkg/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_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
1163
EdkNt32Pkg/Sec/SecMain.c
Normal file
File diff suppressed because it is too large
Load Diff
570
EdkNt32Pkg/Sec/SecMain.h
Normal file
570
EdkNt32Pkg/Sec/SecMain.h
Normal 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;
|
38
EdkNt32Pkg/Sec/SecMain.mbd
Normal file
38
EdkNt32Pkg/Sec/SecMain.mbd
Normal 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>
|
96
EdkNt32Pkg/Sec/SecMain.msa
Normal file
96
EdkNt32Pkg/Sec/SecMain.msa
Normal 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>
|
154
EdkNt32Pkg/Sec/SecMain_build.xml
Normal file
154
EdkNt32Pkg/Sec/SecMain_build.xml
Normal 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:"${env.MSVCDir}\Lib" /LIBPATH:"${env.MSVCDir}\PlatformSdk\Lib"" />
|
||||
<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
178
EdkNt32Pkg/Sec/WinNtThunk.c
Normal 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
47
EdkNt32Pkg/Sec/build.xml
Normal 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>
|
Reference in New Issue
Block a user