]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/Sec/SecMain.h
Removed IntelFrameworkPkg references from SEC
[mirror_edk2.git] / Nt32Pkg / Sec / SecMain.h
1 /*++
2
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
8
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.
11
12
13 Module Name:
14 SecMain.h
15
16 Abstract:
17 Include file for Windows API based SEC
18
19 --*/
20
21 #include <stdio.h>
22 #include <Base.h>
23 #include <PiPei.h>
24 #include <PiDxe.h>
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>
39
40 #include <IndustryStandard/PeImage.h>
41
42
43 #define STACK_SIZE 0x20000
44
45 typedef struct {
46 EFI_PHYSICAL_ADDRESS Address;
47 UINT64 Size;
48 } NT_FD_INFO;
49
50 #define NT_SYSTEM_MEMORY_FILENAME_SIZE 40
51
52 typedef struct {
53 CHAR16 FileName[NT_SYSTEM_MEMORY_FILENAME_SIZE];
54 EFI_PHYSICAL_ADDRESS Memory;
55 UINT64 Size;
56 } NT_SYSTEM_MEMORY;
57
58
59 #define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100
60
61 typedef struct {
62 CHAR8 *PdbPointer;
63 VOID *ModHandle;
64 } PDB_NAME_TO_MOD_HANDLE;
65
66
67
68
69 EFI_STATUS
70 EFIAPI
71 SecWinNtPeiLoadFile (
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
76 )
77 /*++
78
79 Routine Description:
80
81 TODO: Add function description
82
83 Arguments:
84
85 Pe32Data - TODO: add argument description
86 ImageAddress - TODO: add argument description
87 ImageSize - TODO: add argument description
88 EntryPoint - TODO: add argument description
89
90 Returns:
91
92 TODO: add return values
93
94 --*/
95 ;
96
97 EFI_STATUS
98 EFIAPI
99 SecWinNtPeiAutoScan (
100 IN UINTN Index,
101 OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
102 OUT UINT64 *MemorySize
103 )
104 /*++
105
106 Routine Description:
107
108 TODO: Add function description
109
110 Arguments:
111
112 Index - TODO: add argument description
113 MemoryBase - TODO: add argument description
114 MemorySize - TODO: add argument description
115
116 Returns:
117
118 TODO: add return values
119
120 --*/
121 ;
122
123 VOID *
124 EFIAPI
125 SecWinNtWinNtThunkAddress (
126 VOID
127 )
128 /*++
129
130 Routine Description:
131
132 TODO: Add function description
133
134 Arguments:
135
136 InterfaceSize - TODO: add argument description
137 InterfaceBase - TODO: add argument description
138
139 Returns:
140
141 TODO: add return values
142
143 --*/
144 ;
145
146 EFI_STATUS
147 EFIAPI
148 SecWinNtWinNtFwhAddress (
149 IN OUT UINT64 *FwhSize,
150 IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
151 )
152 /*++
153
154 Routine Description:
155
156 TODO: Add function description
157
158 Arguments:
159
160 FwhSize - TODO: add argument description
161 FwhBase - TODO: add argument description
162
163 Returns:
164
165 TODO: add return values
166
167 --*/
168 ;
169
170 EFI_STATUS
171 EFIAPI
172 SecPeiReportStatusCode (
173 IN EFI_PEI_SERVICES **PeiServices,
174 IN EFI_STATUS_CODE_TYPE CodeType,
175 IN EFI_STATUS_CODE_VALUE Value,
176 IN UINT32 Instance,
177 IN EFI_GUID * CallerId,
178 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
179 )
180 /*++
181
182 Routine Description:
183
184 TODO: Add function description
185
186 Arguments:
187
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
194
195 Returns:
196
197 TODO: add return values
198
199 --*/
200 ;
201
202 INTN
203 EFIAPI
204 main (
205 IN INTN Argc,
206 IN CHAR8 **Argv,
207 IN CHAR8 **Envp
208 )
209 /*++
210
211 Routine Description:
212
213 TODO: Add function description
214
215 Arguments:
216
217 Argc - TODO: add argument description
218 Argv - TODO: add argument description
219 Envp - TODO: add argument description
220
221 Returns:
222
223 TODO: add return values
224
225 --*/
226 ;
227
228 EFI_STATUS
229 WinNtOpenFile (
230 CHAR16 *FileName,
231 UINT32 MapSize,
232 DWORD CreationDispostion,
233 EFI_PHYSICAL_ADDRESS *BaseAddress,
234 UINT64 *Length
235 )
236 /*++
237
238 Routine Description:
239
240 TODO: Add function description
241
242 Arguments:
243
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
249
250 Returns:
251
252 TODO: add return values
253
254 --*/
255 ;
256
257 VOID
258 SecLoadFromCore (
259 IN UINTN LargestRegion,
260 IN UINTN LargestRegionSize,
261 IN UINTN BootFirmwareVolumeBase,
262 IN VOID *PeiCoreFile
263 )
264 /*++
265
266 Routine Description:
267
268 TODO: Add function description
269
270 Arguments:
271
272 LargestRegion - TODO: add argument description
273 LargestRegionSize - TODO: add argument description
274 BootFirmwareVolumeBase - TODO: add argument description
275 PeiCoreFile - TODO: add argument description
276
277 Returns:
278
279 TODO: add return values
280
281 --*/
282 ;
283
284 EFI_STATUS
285 SecLoadFile (
286 IN VOID *Pe32Data,
287 IN EFI_PHYSICAL_ADDRESS *ImageAddress,
288 IN UINT64 *ImageSize,
289 IN EFI_PHYSICAL_ADDRESS *EntryPoint
290 )
291 /*++
292
293 Routine Description:
294
295 TODO: Add function description
296
297 Arguments:
298
299 Pe32Data - TODO: add argument description
300 ImageAddress - TODO: add argument description
301 ImageSize - TODO: add argument description
302 EntryPoint - TODO: add argument description
303
304 Returns:
305
306 TODO: add return values
307
308 --*/
309 ;
310
311 EFI_STATUS
312 SecFfsFindPeiCore (
313 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
314 OUT VOID **Pe32Data
315 )
316 /*++
317
318 Routine Description:
319
320 TODO: Add function description
321
322 Arguments:
323
324 FwVolHeader - TODO: add argument description
325 Pe32Data - TODO: add argument description
326
327 Returns:
328
329 TODO: add return values
330
331 --*/
332 ;
333
334 EFI_STATUS
335 SecFfsFindNextFile (
336 IN EFI_FV_FILETYPE SearchType,
337 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
338 IN OUT EFI_FFS_FILE_HEADER **FileHeader
339 )
340 /*++
341
342 Routine Description:
343
344 TODO: Add function description
345
346 Arguments:
347
348 SearchType - TODO: add argument description
349 FwVolHeader - TODO: add argument description
350 FileHeader - TODO: add argument description
351
352 Returns:
353
354 TODO: add return values
355
356 --*/
357 ;
358
359 EFI_STATUS
360 SecFfsFindSectionData (
361 IN EFI_SECTION_TYPE SectionType,
362 IN EFI_FFS_FILE_HEADER *FfsFileHeader,
363 IN OUT VOID **SectionData
364 )
365 /*++
366
367 Routine Description:
368
369 TODO: Add function description
370
371 Arguments:
372
373 SectionType - TODO: add argument description
374 FfsFileHeader - TODO: add argument description
375 SectionData - TODO: add argument description
376
377 Returns:
378
379 TODO: add return values
380
381 --*/
382 ;
383
384 EFI_STATUS
385 EFIAPI
386 SecWinNtPeCoffLoaderLoadAsDll (
387 IN CHAR8 *PdbFileName,
388 IN VOID **ImageEntryPoint,
389 OUT VOID **ModHandle
390 )
391 /*++
392
393 Routine Description:
394
395 TODO: Add function description
396
397 Arguments:
398
399 PdbFileName - TODO: add argument description
400 ImageEntryPoint - TODO: add argument description
401 ModHandle - TODO: add argument description
402
403 Returns:
404
405 TODO: add return values
406
407 --*/
408 ;
409
410 EFI_STATUS
411 EFIAPI
412 SecWinNtPeCoffLoaderFreeLibrary (
413 OUT VOID *ModHandle
414 )
415 /*++
416
417 Routine Description:
418
419 TODO: Add function description
420
421 Arguments:
422
423 ModHandle - TODO: add argument description
424
425 Returns:
426
427 TODO: add return values
428
429 --*/
430 ;
431
432 EFI_STATUS
433 EFIAPI
434 SecWinNtFdAddress (
435 IN UINTN Index,
436 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
437 IN OUT UINT64 *FdSize
438 )
439 /*++
440
441 Routine Description:
442
443 TODO: Add function description
444
445 Arguments:
446
447 Index - TODO: add argument description
448 FdBase - TODO: add argument description
449 FdSize - TODO: add argument description
450
451 Returns:
452
453 TODO: add return values
454
455 --*/
456 ;
457
458 EFI_STATUS
459 GetImageReadFunction (
460 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
461 IN EFI_PHYSICAL_ADDRESS *TopOfMemory
462 )
463 /*++
464
465 Routine Description:
466
467 TODO: Add function description
468
469 Arguments:
470
471 ImageContext - TODO: add argument description
472 TopOfMemory - TODO: add argument description
473
474 Returns:
475
476 TODO: add return values
477
478 --*/
479 ;
480
481 EFI_STATUS
482 EFIAPI
483 SecImageRead (
484 IN VOID *FileHandle,
485 IN UINTN FileOffset,
486 IN OUT UINTN *ReadSize,
487 OUT VOID *Buffer
488 )
489 /*++
490
491 Routine Description:
492
493 TODO: Add function description
494
495 Arguments:
496
497 FileHandle - TODO: add argument description
498 FileOffset - TODO: add argument description
499 ReadSize - TODO: add argument description
500 Buffer - TODO: add argument description
501
502 Returns:
503
504 TODO: add return values
505
506 --*/
507 ;
508
509 CHAR16 *
510 AsciiToUnicode (
511 IN CHAR8 *Ascii,
512 IN UINTN *StrLen OPTIONAL
513 )
514 /*++
515
516 Routine Description:
517
518 TODO: Add function description
519
520 Arguments:
521
522 Ascii - TODO: add argument description
523 StrLen - TODO: add argument description
524
525 Returns:
526
527 TODO: add return values
528
529 --*/
530 ;
531
532 UINTN
533 CountSeperatorsInString (
534 IN const CHAR16 *String,
535 IN CHAR16 Seperator
536 )
537 /*++
538
539 Routine Description:
540
541 TODO: Add function description
542
543 Arguments:
544
545 String - TODO: add argument description
546 Seperator - TODO: add argument description
547
548 Returns:
549
550 TODO: add return values
551
552 --*/
553 ;
554
555 EFI_STATUS
556 EFIAPI
557 SecNt32PeCoffGetImageInfo (
558 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
559 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
560 );
561
562 EFI_STATUS
563 EFIAPI
564 SecNt32PeCoffLoadImage (
565 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
566 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
567 );
568
569 EFI_STATUS
570 EFIAPI
571 SecNt32PeCoffRelocateImage (
572 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
573 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
574 );
575
576 EFI_STATUS
577 EFIAPI
578 SecNt32PeCoffUnloadimage (
579 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
580 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
581 );
582
583
584 typedef struct {
585 EFI_PEI_PE_COFF_LOADER_PROTOCOL PeCoff;
586 VOID *ModHandle;
587 } EFI_PEI_PE_COFF_LOADER_PROTOCOL_INSTANCE;
588
589 extern EFI_WIN_NT_THUNK_PROTOCOL *gWinNt;