return FALSE;\r
}\r
\r
-/**\r
-\r
- Check whether current FileName point to a valid Efi Application\r
-\r
- @param Dir Pointer to current Directory\r
- @param FileName Pointer to current File name.\r
-\r
- @retval TRUE Is a valid Efi Application\r
- @retval FALSE not a valid Efi Application\r
-\r
-**/\r
-BOOLEAN\r
-BOpt_IsEfiApp (\r
- IN EFI_FILE_HANDLE Dir,\r
- IN UINT16 *FileName\r
- )\r
-{\r
- UINTN BufferSize;\r
- EFI_IMAGE_DOS_HEADER DosHdr;\r
- UINT16 Subsystem;\r
- EFI_FILE_HANDLE File;\r
- EFI_STATUS Status;\r
- EFI_IMAGE_OPTIONAL_HEADER_UNION PeHdr;\r
-\r
- Status = Dir->Open (Dir, &File, FileName, EFI_FILE_MODE_READ, 0);\r
-\r
- if (EFI_ERROR (Status)) {\r
- return FALSE;\r
- }\r
-\r
- BufferSize = sizeof (EFI_IMAGE_DOS_HEADER);\r
- File->Read (File, &BufferSize, &DosHdr);\r
- if (DosHdr.e_magic != EFI_IMAGE_DOS_SIGNATURE) {\r
- File->Close (File);\r
- return FALSE;\r
- }\r
\r
- File->SetPosition (File, DosHdr.e_lfanew);\r
- BufferSize = sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION);\r
- File->Read (File, &BufferSize, &PeHdr);\r
- if (PeHdr.Pe32.Signature != EFI_IMAGE_NT_SIGNATURE) {\r
- File->Close (File);\r
- return FALSE;\r
- }\r
- //\r
- // Determine PE type and read subsytem\r
- //\r
- if (PeHdr.Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
- Subsystem = PeHdr.Pe32.OptionalHeader.Subsystem;\r
- } else if (PeHdr.Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {\r
- Subsystem = PeHdr.Pe32Plus.OptionalHeader.Subsystem;\r
- } else {\r
- return FALSE;\r
- }\r
-\r
- if (Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {\r
- File->Close (File);\r
- return TRUE;\r
- } else {\r
- File->Close (File);\r
- return FALSE;\r
- }\r
-}\r
\r
/**\r
\r