17#include <Protocol/DevicePath.h>
18#include <Protocol/LoadedImage.h>
19#include <Protocol/SimpleFileSystem.h>
22#include <Guid/FileInfo.h>
23#include <Guid/GlobalVariable.h>
28#include <Library/BaseLib.h>
29#include <Library/BaseMemoryLib.h>
31#include <Library/DevicePathLib.h>
32#include <Library/MemoryAllocationLib.h>
33#include <Library/MemoryAllocationLibEx.h>
43#include <Library/UefiImageLib.h>
44#include <Library/UefiBootServicesTableLib.h>
45#include <Library/UefiLib.h>
46#include <Library/UefiRuntimeServicesTableLib.h>
47#include <Library/PrintLib.h>
49#if defined (MDE_CPU_IA32)
50#define OC_IMAGE_FILE_MACHINE IMAGE_FILE_MACHINE_I386
51#elif defined (MDE_CPU_X64)
52#define OC_IMAGE_FILE_MACHINE IMAGE_FILE_MACHINE_X64
54 #error Unsupported architecture.
58 0x1f3c963d, 0xf9dc, 0x4537, { 0xbb, 0x06, 0xd8, 0x08, 0x46, 0x4a, 0x85, 0x2e }
62 0xf5bbca36, 0x0f99, 0x4e7b, { 0x86, 0x0f, 0x92, 0x06, 0xa9, 0x3b, 0x52, 0xd0 }
123 IN CONST CHAR8 *Caller
137 "OCB: Restoring trashed L:%u S:%u EBS:%u E:%u after %a\n",
155 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
157 OUT VOID **FileBuffer
161 EFI_FILE_PROTOCOL *File;
171 if (EFI_ERROR (Status)) {
172 return EFI_NOT_FOUND;
179 if (EFI_ERROR (Status) || (
Size == 0)) {
181 return EFI_UNSUPPORTED;
187 return EFI_OUT_OF_RESOURCES;
196 if (EFI_ERROR (Status)) {
199 return EFI_DEVICE_ERROR;
210 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
211 IN BOOLEAN UseLoadImage2,
213 OUT VOID **FileBuffer
219 return EFI_UNSUPPORTED;
225 IN EFI_HANDLE ImageHandle,
226 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
230 EFI_HANDLE DeviceHandle;
231 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
232 EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
234 Status =
gBS->HandleProtocol (
237 (VOID **)&LoadedImage
239 if (EFI_ERROR (Status)) {
243 RemainingDevicePath = DevicePath;
245 if (EFI_ERROR (Status)) {
252 if (LoadedImage->DeviceHandle != DeviceHandle) {
253 LoadedImage->DeviceHandle = DeviceHandle;
254 LoadedImage->FilePath = DuplicateDevicePath (RemainingDevicePath);
263 IN BOOLEAN BootPolicy,
264 IN EFI_HANDLE ParentImageHandle,
265 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
266 IN VOID *SourceBuffer OPTIONAL,
268 OUT EFI_HANDLE *ImageHandle
272 EFI_STATUS ImageStatus;
273 UEFI_IMAGE_LOADER_IMAGE_CONTEXT ImageContext;
275 UINT32 DestinationSize;
276 UINT32 DestinationPages;
277 UINT32 DestinationAlignment;
278 EFI_PHYSICAL_ADDRESS DestinationArea;
279 VOID *DestinationBuffer;
281 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
283 ASSERT (SourceBuffer != NULL);
288 if (SourceSize > MAX_UINT32) {
289 return EFI_UNSUPPORTED;
295 ImageStatus = UefiImageInitializeContext (
299 UEFI_IMAGE_SOURCE_NON_FV,
300 UefiImageOriginUserImage
302 if (EFI_ERROR (ImageStatus)) {
303 DEBUG ((DEBUG_INFO,
"OCB: PeCoff init failure - %r\n", ImageStatus));
304 return EFI_UNSUPPORTED;
307 if (ImageContext.FormatIndex != UefiImageFormatPe) {
314 if (ImageContext.Ctx.Pe.Machine != OC_IMAGE_FILE_MACHINE) {
315 DEBUG ((DEBUG_INFO,
"OCB: PeCoff wrong machine - %x\n", ImageContext.Ctx.Pe.Machine));
316 return EFI_UNSUPPORTED;
322 if (ImageContext.Ctx.Pe.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) {
323 DEBUG ((DEBUG_INFO,
"OCB: PeCoff no support for RT drivers\n"));
324 return EFI_UNSUPPORTED;
327 ImageSize = UefiImageGetImageSize (&ImageContext);
328 DestinationPages = EFI_SIZE_TO_PAGES (ImageSize);
329 DestinationSize = EFI_PAGES_TO_SIZE (DestinationPages);
330 DestinationAlignment = UefiImageGetSegmentAlignment (&ImageContext);
332 if (DestinationSize >= BASE_16MB) {
333 DEBUG ((DEBUG_INFO,
"OCB: PeCoff prohibits files over 16M (%u)\n", DestinationSize));
334 return RETURN_UNSUPPORTED;
341 Status = AllocateAlignedPagesEx (
343 ImageContext.Ctx.Pe.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION
344 ? EfiLoaderCode : EfiBootServicesCode,
346 DestinationAlignment,
350 if (EFI_ERROR (Status)) {
351 DEBUG ((DEBUG_INFO,
"OCB: PeCoff could allocate image buffer\n"));
355 DestinationBuffer = (VOID *)(UINTN)DestinationArea;
360 ImageStatus = UefiImageLoadImageForExecution (
368 if (EFI_ERROR (ImageStatus)) {
369 DEBUG ((DEBUG_INFO,
"OCB: PeCoff load image for execution error - %r\n", ImageStatus));
370 FreeAlignedPages (DestinationBuffer, DestinationPages);
371 return EFI_UNSUPPORTED;
377 OcLoadedImage = AllocateZeroPool (
sizeof (*OcLoadedImage));
378 if (OcLoadedImage == NULL) {
379 FreeAlignedPages (DestinationBuffer, DestinationPages);
380 return EFI_OUT_OF_RESOURCES;
383 OcLoadedImage->
EntryPoint = (EFI_IMAGE_ENTRY_POINT)((UINTN)DestinationBuffer + ImageContext.Ctx.Pe.AddressOfEntryPoint);
384 OcLoadedImage->
ImageArea = DestinationArea;
385 OcLoadedImage->
PageCount = DestinationPages;
386 OcLoadedImage->
Subsystem = ImageContext.Ctx.Pe.Subsystem;
390 LoadedImage->Revision = EFI_LOADED_IMAGE_INFORMATION_REVISION;
391 LoadedImage->ParentHandle = ParentImageHandle;
392 LoadedImage->SystemTable =
gST;
393 LoadedImage->ImageBase = DestinationBuffer;
394 LoadedImage->ImageSize = DestinationSize;
398 if (ImageContext.Ctx.Pe.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
399 LoadedImage->ImageCodeType = EfiLoaderCode;
400 LoadedImage->ImageDataType = EfiLoaderData;
402 LoadedImage->ImageCodeType = EfiBootServicesCode;
403 LoadedImage->ImageDataType = EfiBootServicesData;
410 Status =
gBS->InstallMultipleProtocolInterfaces (
418 if (EFI_ERROR (Status)) {
419 DEBUG ((DEBUG_INFO,
"OCB: PeCoff proto install error - %r\n", Status));
420 FreePool (OcLoadedImage);
421 FreeAlignedPages (DestinationBuffer, DestinationPages);
425 DEBUG ((DEBUG_VERBOSE,
"OCB: Loaded image at %p\n", *ImageHandle));
442 IN EFI_HANDLE ImageHandle
446 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
448 LoadedImage = &OcLoadedImage->LoadedImage;
449 if (LoadedImage->Unload != NULL) {
450 Status = LoadedImage->Unload (ImageHandle);
451 if (EFI_ERROR (Status)) {
458 LoadedImage->Unload = NULL;
459 }
else if (OcLoadedImage->Started) {
460 return EFI_UNSUPPORTED;
463 Status =
gBS->UninstallMultipleProtocolInterfaces (
471 if (EFI_ERROR (Status)) {
475 FreeAlignedPages ((VOID *)(UINTN)OcLoadedImage->ImageArea, OcLoadedImage->PageCount);
476 FreePool (OcLoadedImage);
503 IN EFI_HANDLE ImageHandle,
504 IN EFI_STATUS ExitStatus,
505 IN UINTN ExitDataSize,
506 IN CHAR16 *ExitData OPTIONAL
513 "OCB: Exit %p %p (%d) - %r\n",
516 OcLoadedImage->Started,
523 OldTpl =
gBS->RaiseTPL (TPL_NOTIFY);
529 if (!OcLoadedImage->Started) {
531 gBS->RestoreTPL (OldTpl);
539 DEBUG ((DEBUG_LOAD|DEBUG_ERROR,
"OCB: Image is not exitable image\n"));
540 gBS->RestoreTPL (OldTpl);
541 return EFI_INVALID_PARAMETER;
547 OcLoadedImage->Status = ExitStatus;
552 if (ExitData != NULL) {
553 OcLoadedImage->ExitDataSize = ExitDataSize;
554 OcLoadedImage->ExitData = AllocatePool (OcLoadedImage->ExitDataSize);
555 if (OcLoadedImage->ExitData != NULL) {
556 CopyMem (OcLoadedImage->ExitData, ExitData, OcLoadedImage->ExitDataSize);
558 OcLoadedImage->ExitDataSize = 0;
565 gBS->RestoreTPL (OldTpl);
566 LongJump (OcLoadedImage->JumpContext, (UINTN)-1);
573 return EFI_ACCESS_DENIED;
591 IN EFI_HANDLE ImageHandle,
592 OUT UINTN *ExitDataSize,
593 OUT CHAR16 **ExitData OPTIONAL
597 EFI_HANDLE LastImage;
611 OcLoadedImage->JumpBuffer = AllocatePool (
612 sizeof (BASE_LIBRARY_JUMP_BUFFER) + BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT
614 if (OcLoadedImage->JumpBuffer == NULL) {
619 return EFI_OUT_OF_RESOURCES;
622 OcLoadedImage->JumpContext = ALIGN_POINTER (
623 OcLoadedImage->JumpBuffer,
624 BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT
627 SetJumpFlag = SetJump (OcLoadedImage->JumpContext);
632 if (SetJumpFlag == 0) {
636 DEBUG ((DEBUG_VERBOSE,
"OCB: Starting image %p\n", ImageHandle));
637 OcLoadedImage->Started = TRUE;
638 OcLoadedImage->Status = OcLoadedImage->EntryPoint (
640 OcLoadedImage->LoadedImage.SystemTable
648 FreePool (OcLoadedImage->JumpBuffer);
663 if ((ExitData != NULL) && (ExitDataSize != NULL)) {
664 *ExitDataSize = OcLoadedImage->ExitDataSize;
665 *ExitData = OcLoadedImage->ExitData;
666 }
else if (OcLoadedImage->ExitData != NULL) {
670 FreePool (OcLoadedImage->ExitData);
671 OcLoadedImage->ExitData = NULL;
677 Status = OcLoadedImage->Status;
683 if ( EFI_ERROR (OcLoadedImage->Status)
684 || (OcLoadedImage->Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION))
703 IN VOID *SourceBuffer,
716 (CONST UINT8 *)
"Mac OS X 10.",
720 SourceSize -
sizeof (UINT32),
742 if (((UINT8 *)SourceBuffer)[Result +
L_STR_LEN (
"Mac OS X 10.")] ==
'7') {
754 Result = SourceSize / 2;
756 (CONST UINT8 *)
"x86_64",
760 SourceSize -
sizeof (UINT32),
775 IN BOOLEAN BootPolicy,
776 IN EFI_HANDLE ParentImageHandle,
777 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
778 IN VOID *SourceBuffer OPTIONAL,
780 OUT EFI_HANDLE *ImageHandle
783 EFI_STATUS SecureBootStatus;
784 EFI_STATUS FilterStatus;
786 VOID *AllocatedBuffer;
789 UINT32 SignedFileSize;
792 BOOLEAN FixupRequired;
793 BOOLEAN AppleBootPath;
795 if ((ParentImageHandle == NULL) || (ImageHandle == NULL)) {
796 return EFI_INVALID_PARAMETER;
799 if ((SourceBuffer == NULL) && (DevicePath == NULL)) {
800 return EFI_NOT_FOUND;
803 if ((SourceBuffer != NULL) && (SourceSize == 0)) {
804 return EFI_UNSUPPORTED;
807 OcImageLoaderCaps = NULL;
808 AllocatedBuffer = NULL;
809 if (SourceBuffer == NULL) {
815 if (EFI_ERROR (Status)) {
824 if (!EFI_ERROR (Status)) {
825 AllocatedBuffer = SourceBuffer;
836 SecureBootStatus = EFI_UNSUPPORTED;
842 if (SecureBootStatus == EFI_SECURITY_VIOLATION) {
845 "OCB: Apple Secure Boot prohibits this boot entry, enforcing!\n"
847 return EFI_SECURITY_VIOLATION;
850 if (SourceBuffer != NULL) {
851 RealSize = (UINT32)SourceSize;
858 IsFatSlice = !EFI_ERROR (FilterStatus) && (RealSize != SourceSize) && (RealSize >= EFI_PAGE_SIZE);
861 OcImageLoaderCaps = AllocateZeroPool (
sizeof (*OcImageLoaderCaps));
862 if (OcImageLoaderCaps == NULL) {
863 if (AllocatedBuffer != NULL) {
864 FreePool (AllocatedBuffer);
867 return EFI_OUT_OF_RESOURCES;
879 if (SecureBootStatus == EFI_SUCCESS) {
880 DEBUG ((DEBUG_INFO,
"OCB: Secure boot, fixup efi ignored\n"));
881 FixupRequired = FALSE;
882 }
else if (IsFatSlice) {
883 DEBUG ((DEBUG_INFO,
"OCB: Fat binary, fixup efi...\n"));
884 FixupRequired = TRUE;
886 AppleBootPath = FALSE;
887 if (DevicePath != NULL) {
892 if (!EFI_ERROR (Status)) {
899 DEBUG ((DEBUG_INFO,
"OCB: Apple booter path, fixup efi...\n"));
900 FixupRequired = TRUE;
906 SignedFileSize = RealSize;
908 if (!EFI_ERROR (Status)) {
911 "OCB: Apple signed binary %u->%u, fixup efi...\n",
915 RealSize = SignedFileSize;
916 FixupRequired = TRUE;
918 DEBUG ((DEBUG_INFO,
"OCB: Not Apple signed binary, fixup efi ignored\n"));
919 FixupRequired = FALSE;
931 if (EFI_ERROR (Status)) {
932 if (AllocatedBuffer != NULL) {
933 FreePool (AllocatedBuffer);
943 "OCB: Arch filtering %p(%u)->%p(%u) caps %u - %r\n",
948 OcImageLoaderCaps == NULL ? 0 : OcImageLoaderCaps->
ImageCaps,
952 if (!EFI_ERROR (FilterStatus)) {
953 SourceSize = RealSize;
954 }
else if (AllocatedBuffer != NULL) {
971 if (SecureBootStatus == EFI_SUCCESS) {
972 if (SourceBuffer != NULL) {
993 Status = EFI_UNSUPPORTED;
1007 if (!EFI_ERROR (Status) && (OcImageLoaderCaps != NULL)) {
1008 Status =
gBS->InstallMultipleProtocolInterfaces (
1014 if (!EFI_ERROR (Status)) {
1015 OcImageLoaderCaps = NULL;
1017 DEBUG ((DEBUG_INFO,
"OCB: LoaderCaps proto install error - %r\n", Status));
1023 if (OcImageLoaderCaps != NULL) {
1024 FreePool (OcImageLoaderCaps);
1027 if (AllocatedBuffer != NULL) {
1028 FreePool (AllocatedBuffer);
1035 if (!EFI_ERROR (Status) && (SourceBuffer != NULL) && (DevicePath != NULL)) {
1046 IN EFI_HANDLE ImageHandle,
1047 OUT UINTN *ExitDataSize,
1048 OUT CHAR16 **ExitData OPTIONAL
1053 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
1069 Status =
gBS->HandleProtocol (
1072 (VOID **)&OcLoadedImage
1074 if (!EFI_ERROR (Status)) {
1097 Status =
gBS->HandleProtocol (
1100 (VOID **)&LoadedImage
1102 if (!EFI_ERROR (Status)) {
1103 Status =
gBS->HandleProtocol (
1106 (VOID **)&OcImageLoaderCaps
1108 if (!EFI_ERROR (Status)) {
1109 Caps = OcImageLoaderCaps->ImageCaps;
1130 IN EFI_HANDLE ImageHandle
1140 Status =
gBS->HandleProtocol (
1143 (VOID **)&OcLoadedImage
1145 if (!EFI_ERROR (Status)) {
1155 Status =
gBS->HandleProtocol (
1158 (VOID **)&OcImageLoaderCaps
1160 if (!EFI_ERROR (Status)) {
1161 Status =
gBS->UninstallMultipleProtocolInterfaces (
1167 if (EFI_ERROR (Status)) {
1171 FreePool (OcImageLoaderCaps);
1181 IN EFI_HANDLE ImageHandle,
1182 IN EFI_STATUS ExitStatus,
1183 IN UINTN ExitDataSize,
1184 IN CHAR16 *ExitData OPTIONAL
1193 Status =
gBS->HandleProtocol (
1196 (VOID **)&OcLoadedImage
1199 DEBUG ((DEBUG_VERBOSE,
"OCB: InternalEfiExit %p - %r / %r\n", ImageHandle, ExitStatus, Status));
1201 if (!EFI_ERROR (Status)) {
1212 Status =
mOriginalEfiExit (ImageHandle, ExitStatus, ExitDataSize, ExitData);
1220 IN CONST BOOLEAN ProtectUefiServices,
1221 IN CONST BOOLEAN FixupAppleEfiImages
1238 gBS->CalculateCrc32 (
gBS,
gBS->Hdr.HeaderSize, &
gBS->Hdr.CRC32);
#define APPLE_BOOTER_DEFAULT_FILE_NAME
STATIC BOOLEAN mProtectUefiServices
STATIC OC_IMAGE_LOADER_CONFIGURE mImageLoaderConfigure
STATIC EFI_IMAGE_START mPreservedStartImage
VOID OcImageLoaderInit(IN CONST BOOLEAN ProtectUefiServices, IN CONST BOOLEAN FixupAppleEfiImages)
STATIC EFI_STATUS InternalEfiLoadImageFile(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT UINTN *FileSize, OUT VOID **FileBuffer)
STATIC BOOLEAN mFixupAppleEfiImages
STATIC EFI_IMAGE_LOAD mPreservedLoadImage
STATIC EFI_STATUS InternalDirectStartImage(IN OC_LOADED_IMAGE_PROTOCOL *OcLoadedImage, IN EFI_HANDLE ImageHandle, OUT UINTN *ExitDataSize, OUT CHAR16 **ExitData OPTIONAL)
STATIC BOOLEAN mImageLoaderEnabled
EFI_STATUS EFIAPI OcImageLoaderLoad(IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN VOID *SourceBuffer OPTIONAL, IN UINTN SourceSize, OUT EFI_HANDLE *ImageHandle)
VOID OcImageLoaderRegisterConfigure(IN OC_IMAGE_LOADER_CONFIGURE Configure OPTIONAL)
STATIC EFI_STATUS EFIAPI InternalEfiLoadImage(IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN VOID *SourceBuffer OPTIONAL, IN UINTN SourceSize, OUT EFI_HANDLE *ImageHandle)
STATIC EFI_STATUS InternalUpdateLoadedImage(IN EFI_HANDLE ImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
STATIC EFI_IMAGE_UNLOAD mOriginalEfiUnloadImage
VOID OcImageLoaderActivate(VOID)
STATIC EFI_IMAGE_START mOriginalEfiStartImage
STATIC EFI_GUID mOcLoadedImageProtocolGuid
STATIC EFI_STATUS InternalDirectExit(IN OC_LOADED_IMAGE_PROTOCOL *OcLoadedImage, IN EFI_HANDLE ImageHandle, IN EFI_STATUS ExitStatus, IN UINTN ExitDataSize, IN CHAR16 *ExitData OPTIONAL)
STATIC OC_IMAGE_LOADER_PATCH mImageLoaderPatch
STATIC EFI_EXIT mPreservedExit
STATIC VOID PreserveGrubShimHooks(VOID)
STATIC EFI_STATUS EFIAPI InternalEfiExit(IN EFI_HANDLE ImageHandle, IN EFI_STATUS ExitStatus, IN UINTN ExitDataSize, IN CHAR16 *ExitData OPTIONAL)
STATIC VOID RestoreGrubShimHooks(IN CONST CHAR8 *Caller)
STATIC EFI_STATUS EFIAPI InternalEfiUnloadImage(IN EFI_HANDLE ImageHandle)
STATIC EFI_IMAGE_LOAD mOriginalEfiLoadImage
STATIC EFI_HANDLE mCurrentImageHandle
STATIC EFI_STATUS EFIAPI InternalEfiStartImage(IN EFI_HANDLE ImageHandle, OUT UINTN *ExitDataSize, OUT CHAR16 **ExitData OPTIONAL)
STATIC EFI_EXIT_BOOT_SERVICES mPreservedExitBootServices
STATIC UINT32 DetectCapabilities(IN VOID *SourceBuffer, IN UINT32 SourceSize)
VOID OcImageLoaderRegisterPatch(IN OC_IMAGE_LOADER_PATCH Patch OPTIONAL)
STATIC EFI_STATUS InternalEfiLoadImageProtocol(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN BOOLEAN UseLoadImage2, OUT UINTN *FileSize, OUT VOID **FileBuffer)
STATIC EFI_GUID mOcImageLoaderCapsProtocolGuid
STATIC EFI_EXIT mOriginalEfiExit
STATIC EFI_STATUS InternalDirectUnloadImage(IN OC_LOADED_IMAGE_PROTOCOL *OcLoadedImage, IN EFI_HANDLE ImageHandle)
EFI_STATUS OcBootPolicyDevicePathToFilePath(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT CHAR16 **BootPathName)
DMG_FILEPATH_DEVICE_PATH FilePath
DMG_SIZE_DEVICE_PATH Size
EFI_STATUS OcAppleSecureBootVerify(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN VOID *SourceBuffer, IN UINTN SourceSize)
#define OC_KERN_CAPABILITY_K64_U64
Supports K64 and U64 (10.6+)
VOID(* OC_IMAGE_LOADER_CONFIGURE)(IN OUT EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN UINT32 Capabilities)
#define OC_KERN_CAPABILITY_K32_U64
Supports K32 and U64 (10.4~10.7)
VOID(* OC_IMAGE_LOADER_PATCH)(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL, IN VOID *SourceBuffer, IN UINTN SourceSize)
#define OC_KERN_CAPABILITY_K32_U32
Supports K32 and U32 (10.4~10.6)
EFI_STATUS EFIAPI OcOpenFileByDevicePath(IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath, OUT EFI_FILE_PROTOCOL **File, IN UINT64 OpenMode, IN UINT64 Attributes)
EFI_STATUS OcGetFileSize(IN EFI_FILE_PROTOCOL *File, OUT UINT32 *Size)
EFI_STATUS OcGetFileData(IN EFI_FILE_PROTOCOL *File, IN UINT32 Position, IN UINT32 Size, OUT UINT8 *Buffer)
EFI_STATUS FatFilterArchitecture64(IN OUT UINT8 **FileData, IN OUT UINT32 *FileSize)
EFI_STATUS FatFilterArchitecture32(IN OUT UINT8 **FileData, IN OUT UINT32 *FileSize)
BOOLEAN FindPattern(IN CONST UINT8 *Pattern, IN CONST UINT8 *PatternMask OPTIONAL, IN CONST UINT32 PatternSize, IN CONST UINT8 *Data, IN UINT32 DataSize, IN OUT UINT32 *DataOff)
EFI_STATUS PeCoffVerifyAppleSignature(IN OUT VOID *PeImage, IN OUT UINT32 *ImageSize)
EFI_STATUS OcPatchLegacyEfi(IN VOID *DriverBuffer, IN UINT32 DriverSize)
#define L_STR_LEN(String)
#define L_STR_SIZE(String)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
EFI_GUID gEfiSimpleFileSystemProtocolGuid
EFI_GUID gEfiLoadedImageProtocolGuid
BASE_LIBRARY_JUMP_BUFFER * JumpContext
EFI_IMAGE_ENTRY_POINT EntryPoint
EFI_PHYSICAL_ADDRESS ImageArea
EFI_LOADED_IMAGE_PROTOCOL LoadedImage