}\r
\r
\r
-UINT32\r
-EFIAPI\r
-PeCoffGetSizeOfHeaders (\r
- IN VOID *Pe32Data\r
- )\r
-{\r
- EFI_IMAGE_DOS_HEADER *DosHdr;\r
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;\r
- UINTN SizeOfHeaders;\r
-\r
- DosHdr = (EFI_IMAGE_DOS_HEADER *)Pe32Data;\r
- if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
- //\r
- // DOS image header is present, so read the PE header after the DOS image header.\r
- //\r
- Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN) Pe32Data + (UINTN) ((DosHdr->e_lfanew) & 0x0ffff));\r
- } else {\r
- //\r
- // DOS image header is not present, so PE header is at the image base.\r
- //\r
- Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)Pe32Data;\r
- }\r
-\r
- if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) {\r
- SizeOfHeaders = sizeof (EFI_TE_IMAGE_HEADER) + (UINTN)Hdr.Te->BaseOfCode - (UINTN)Hdr.Te->StrippedSize;\r
- } else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) {\r
- SizeOfHeaders = Hdr.Pe32->OptionalHeader.SizeOfHeaders;\r
- } else {\r
- SizeOfHeaders = 0;\r
- }\r
-\r
- return SizeOfHeaders;\r
-}\r
\r
\r
CHAR8 *\r