3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 Include file for Windows API based SEC
25 #include <WinNtPeim.h>
26 #include <Library/BaseLib.h>
27 #include <Library/PeCoffLib.h>
28 #include <Guid/PeiPeCoffLoader.h>
29 #include <Ppi/NtPeiLoadFile.h>
30 #include <Ppi/NtAutoscan.h>
31 #include <Ppi/NtThunk.h>
32 #include <Ppi/StatusCode.h>
33 #include <Ppi/NtFwh.h>
34 #include <Library/PcdLib.h>
35 #include <Library/DebugLib.h>
36 #include <Library/PrintLib.h>
37 #include <Library/BaseMemoryLib.h>
38 #include <Library/ReportStatusCodeLib.h>
40 #include <IndustryStandard/PeImage.h>
43 #define STACK_SIZE 0x20000
46 EFI_PHYSICAL_ADDRESS Address
;
50 #define NT_SYSTEM_MEMORY_FILENAME_SIZE 40
53 CHAR16 FileName
[NT_SYSTEM_MEMORY_FILENAME_SIZE
];
54 EFI_PHYSICAL_ADDRESS Memory
;
59 #define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100
64 } PDB_NAME_TO_MOD_HANDLE
;
72 VOID
*Pe32Data
, // TODO: add IN/OUT modifier to Pe32Data
73 EFI_PHYSICAL_ADDRESS
*ImageAddress
, // TODO: add IN/OUT modifier to ImageAddress
74 UINT64
*ImageSize
, // TODO: add IN/OUT modifier to ImageSize
75 EFI_PHYSICAL_ADDRESS
*EntryPoint
// TODO: add IN/OUT modifier to EntryPoint
81 TODO: Add function description
85 Pe32Data - TODO: add argument description
86 ImageAddress - TODO: add argument description
87 ImageSize - TODO: add argument description
88 EntryPoint - TODO: add argument description
92 TODO: add return values
101 OUT EFI_PHYSICAL_ADDRESS
*MemoryBase
,
102 OUT UINT64
*MemorySize
108 TODO: Add function description
112 Index - TODO: add argument description
113 MemoryBase - TODO: add argument description
114 MemorySize - TODO: add argument description
118 TODO: add return values
125 SecWinNtWinNtThunkAddress (
132 TODO: Add function description
136 InterfaceSize - TODO: add argument description
137 InterfaceBase - TODO: add argument description
141 TODO: add return values
148 SecWinNtWinNtFwhAddress (
149 IN OUT UINT64
*FwhSize
,
150 IN OUT EFI_PHYSICAL_ADDRESS
*FwhBase
156 TODO: Add function description
160 FwhSize - TODO: add argument description
161 FwhBase - TODO: add argument description
165 TODO: add return values
172 SecPeiReportStatusCode (
173 IN EFI_PEI_SERVICES
**PeiServices
,
174 IN EFI_STATUS_CODE_TYPE CodeType
,
175 IN EFI_STATUS_CODE_VALUE Value
,
177 IN EFI_GUID
* CallerId
,
178 IN EFI_STATUS_CODE_DATA
* Data OPTIONAL
184 TODO: Add function description
188 PeiServices - TODO: add argument description
189 CodeType - TODO: add argument description
190 Value - TODO: add argument description
191 Instance - TODO: add argument description
192 CallerId - TODO: add argument description
193 Data - TODO: add argument description
197 TODO: add return values
213 TODO: Add function description
217 Argc - TODO: add argument description
218 Argv - TODO: add argument description
219 Envp - TODO: add argument description
223 TODO: add return values
232 DWORD CreationDispostion
,
233 EFI_PHYSICAL_ADDRESS
*BaseAddress
,
240 TODO: Add function description
244 FileName - TODO: add argument description
245 MapSize - TODO: add argument description
246 CreationDispostion - TODO: add argument description
247 BaseAddress - TODO: add argument description
248 Length - TODO: add argument description
252 TODO: add return values
259 IN UINTN LargestRegion
,
260 IN UINTN LargestRegionSize
,
261 IN UINTN BootFirmwareVolumeBase
,
268 TODO: Add function description
272 LargestRegion - TODO: add argument description
273 LargestRegionSize - TODO: add argument description
274 BootFirmwareVolumeBase - TODO: add argument description
275 PeiCoreFile - TODO: add argument description
279 TODO: add return values
287 IN EFI_PHYSICAL_ADDRESS
*ImageAddress
,
288 IN UINT64
*ImageSize
,
289 IN EFI_PHYSICAL_ADDRESS
*EntryPoint
295 TODO: Add function description
299 Pe32Data - TODO: add argument description
300 ImageAddress - TODO: add argument description
301 ImageSize - TODO: add argument description
302 EntryPoint - TODO: add argument description
306 TODO: add return values
313 IN EFI_FIRMWARE_VOLUME_HEADER
*FwVolHeader
,
320 TODO: Add function description
324 FwVolHeader - TODO: add argument description
325 Pe32Data - TODO: add argument description
329 TODO: add return values
336 IN EFI_FV_FILETYPE SearchType
,
337 IN EFI_FIRMWARE_VOLUME_HEADER
*FwVolHeader
,
338 IN OUT EFI_FFS_FILE_HEADER
**FileHeader
344 TODO: Add function description
348 SearchType - TODO: add argument description
349 FwVolHeader - TODO: add argument description
350 FileHeader - TODO: add argument description
354 TODO: add return values
360 SecFfsFindSectionData (
361 IN EFI_SECTION_TYPE SectionType
,
362 IN EFI_FFS_FILE_HEADER
*FfsFileHeader
,
363 IN OUT VOID
**SectionData
369 TODO: Add function description
373 SectionType - TODO: add argument description
374 FfsFileHeader - TODO: add argument description
375 SectionData - TODO: add argument description
379 TODO: add return values
386 SecWinNtPeCoffLoaderLoadAsDll (
387 IN CHAR8
*PdbFileName
,
388 IN VOID
**ImageEntryPoint
,
395 TODO: Add function description
399 PdbFileName - TODO: add argument description
400 ImageEntryPoint - TODO: add argument description
401 ModHandle - TODO: add argument description
405 TODO: add return values
412 SecWinNtPeCoffLoaderFreeLibrary (
419 TODO: Add function description
423 ModHandle - TODO: add argument description
427 TODO: add return values
436 IN OUT EFI_PHYSICAL_ADDRESS
*FdBase
,
437 IN OUT UINT64
*FdSize
443 TODO: Add function description
447 Index - TODO: add argument description
448 FdBase - TODO: add argument description
449 FdSize - TODO: add argument description
453 TODO: add return values
459 GetImageReadFunction (
460 IN PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
,
461 IN EFI_PHYSICAL_ADDRESS
*TopOfMemory
467 TODO: Add function description
471 ImageContext - TODO: add argument description
472 TopOfMemory - TODO: add argument description
476 TODO: add return values
486 IN OUT UINTN
*ReadSize
,
493 TODO: Add function description
497 FileHandle - TODO: add argument description
498 FileOffset - TODO: add argument description
499 ReadSize - TODO: add argument description
500 Buffer - TODO: add argument description
504 TODO: add return values
512 IN UINTN
*StrLen OPTIONAL
518 TODO: Add function description
522 Ascii - TODO: add argument description
523 StrLen - TODO: add argument description
527 TODO: add return values
533 CountSeperatorsInString (
534 IN
const CHAR16
*String
,
541 TODO: Add function description
545 String - TODO: add argument description
546 Seperator - TODO: add argument description
550 TODO: add return values
557 SecNt32PeCoffGetImageInfo (
558 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
559 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
564 SecNt32PeCoffLoadImage (
565 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
566 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
571 SecNt32PeCoffRelocateImage (
572 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
573 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
578 SecNt32PeCoffUnloadimage (
579 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
580 IN PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
585 EFI_PEI_PE_COFF_LOADER_PROTOCOL PeCoff
;
587 } EFI_PEI_PE_COFF_LOADER_PROTOCOL_INSTANCE
;
589 extern EFI_WIN_NT_THUNK_PROTOCOL
*gWinNt
;