15#ifndef OC_APPLE_KERNEL_LIB_H
16#define OC_APPLE_KERNEL_LIB_H
22#include <Protocol/SimpleFileSystem.h>
24#define PRELINK_KERNEL_IDENTIFIER "__kernel__"
25#define PRELINK_KPI_IDENTIFIER_PREFIX "com.apple.kpi."
27#define PRELINK_INFO_SEGMENT "__PRELINK_INFO"
28#define PRELINK_INFO_SECTION "__info"
29#define PRELINK_TEXT_SEGMENT "__PRELINK_TEXT"
30#define PRELINK_TEXT_SECTION "__text"
31#define PRELINK_STATE_SEGMENT "__PRELINK_STATE"
32#define PRELINK_STATE_SECTION_KERNEL "__kernel"
33#define PRELINK_STATE_SECTION_KEXTS "__kexts"
35#define PRELINK_INFO_DICTIONARY_KEY "_PrelinkInfoDictionary"
36#define PRELINK_INFO_KMOD_INFO_KEY "_PrelinkKmodInfo"
37#define PRELINK_INFO_BUNDLE_PATH_KEY "_PrelinkBundlePath"
38#define PRELINK_INFO_EXECUTABLE_RELATIVE_PATH_KEY "_PrelinkExecutableRelativePath"
39#define PRELINK_INFO_EXECUTABLE_LOAD_ADDR_KEY "_PrelinkExecutableLoadAddr"
40#define PRELINK_INFO_EXECUTABLE_SOURCE_ADDR_KEY "_PrelinkExecutableSourceAddr"
41#define PRELINK_INFO_EXECUTABLE_SIZE_KEY "_PrelinkExecutableSize"
42#define PRELINK_INFO_LINK_STATE_ADDR_KEY "_PrelinkLinkState"
43#define PRELINK_INFO_LINK_STATE_SIZE_KEY "_PrelinkLinkStateSize"
45#define INFO_BUNDLE_IDENTIFIER_KEY "CFBundleIdentifier"
46#define INFO_BUNDLE_EXECUTABLE_KEY "CFBundleExecutable"
47#define INFO_BUNDLE_LIBRARIES_KEY "OSBundleLibraries"
48#define INFO_BUNDLE_LIBRARIES_64_KEY "OSBundleLibraries_x86_64"
49#define INFO_BUNDLE_VERSION_KEY "CFBundleVersion"
50#define INFO_BUNDLE_COMPATIBLE_VERSION_KEY "OSBundleCompatibleVersion"
51#define INFO_BUNDLE_OS_BUNDLE_REQUIRED_KEY "OSBundleRequired"
53#define OS_BUNDLE_REQUIRED_ROOT "Root"
54#define OS_BUNDLE_REQUIRED_SAFE_BOOT "Safe Boot"
56#define MKEXT_INFO_DICTIONARIES_KEY "_MKEXTInfoDictionaries"
57#define MKEXT_BUNDLE_PATH_KEY "_MKEXTBundlePath"
58#define MKEXT_EXECUTABLE_RELATIVE_PATH_KEY "_MKEXTExecutableRelativePath"
59#define MKEXT_EXECUTABLE_KEY "_MKEXTExecutable"
61#define PRELINK_INFO_INTEGER_ATTRIBUTES "size=\"64\""
62#define MKEXT_INFO_INTEGER_ATTRIBUTES "size=\"32\""
64#define KC_REGION_SEGMENT_PREFIX "__REGION"
65#define KC_REGION0_SEGMENT "__REGION0"
66#define KC_TEXT_SEGMENT "__TEXT"
67#define KC_LINKEDIT_SEGMENT "__LINKEDIT"
68#define KC_MOSCOW_SEGMENT "__MOSCOW101"
73#define MAX_INFO_BUNDLE_VERSION_KEY_SIZE 32
88#define PRINT_KERNEL_CACHE_TYPE(a) (\
89 (a) == CacheTypeCacheless ? "Cacheless" : \
90 ((a) == CacheTypeMkext ? "Mkext" : \
91 (((a) == CacheTypePrelinked ? "Prelinked" : "Kernel"))))
96#define PRELINKED_KEXTS_MAX_SIZE (BIT16 * MACHO_PAGE_SIZE)
101#define PRELINK_INFO_RESERVE_SIZE (5U * 1024U * 1024U)
107#define PLIST_EXPANSION_SIZE 512
112#define KERNEL_VERSION(A, B, C) ((A) * 10000 + (B) * 100 + (C))
117#define KERNEL_VERSION_TIGER 8
118#define KERNEL_VERSION_LEOPARD 9
119#define KERNEL_VERSION_SNOW_LEOPARD 10
120#define KERNEL_VERSION_LION 11
121#define KERNEL_VERSION_MOUNTAIN_LION 12
122#define KERNEL_VERSION_MAVERICKS 13
123#define KERNEL_VERSION_YOSEMITE 14
124#define KERNEL_VERSION_EL_CAPITAN 15
125#define KERNEL_VERSION_SIERRA 16
126#define KERNEL_VERSION_HIGH_SIERRA 17
127#define KERNEL_VERSION_MOJAVE 18
128#define KERNEL_VERSION_CATALINA 19
129#define KERNEL_VERSION_BIG_SUR 20
130#define KERNEL_VERSION_MONTEREY 21
131#define KERNEL_VERSION_VENTURA 22
132#define KERNEL_VERSION_SONOMA 23
133#define KERNEL_VERSION_SEQUOIA 24
138#define KERNEL_VERSION_TIGER_MIN KERNEL_VERSION (KERNEL_VERSION_TIGER, 0, 0)
139#define KERNEL_VERSION_LEOPARD_MIN KERNEL_VERSION (KERNEL_VERSION_LEOPARD, 0, 0)
140#define KERNEL_VERSION_SNOW_LEOPARD_MIN KERNEL_VERSION (KERNEL_VERSION_SNOW_LEOPARD, 0, 0)
141#define KERNEL_VERSION_LION_MIN KERNEL_VERSION (KERNEL_VERSION_LION, 0, 0)
142#define KERNEL_VERSION_MOUNTAIN_LION_MIN KERNEL_VERSION (KERNEL_VERSION_MOUNTAIN_LION, 0, 0)
143#define KERNEL_VERSION_MAVERICKS_MIN KERNEL_VERSION (KERNEL_VERSION_MAVERICKS, 0, 0)
144#define KERNEL_VERSION_YOSEMITE_MIN KERNEL_VERSION (KERNEL_VERSION_YOSEMITE, 0, 0)
145#define KERNEL_VERSION_EL_CAPITAN_MIN KERNEL_VERSION (KERNEL_VERSION_EL_CAPITAN, 0, 0)
146#define KERNEL_VERSION_SIERRA_MIN KERNEL_VERSION (KERNEL_VERSION_SIERRA, 0, 0)
147#define KERNEL_VERSION_HIGH_SIERRA_MIN KERNEL_VERSION (KERNEL_VERSION_HIGH_SIERRA, 0, 0)
148#define KERNEL_VERSION_MOJAVE_MIN KERNEL_VERSION (KERNEL_VERSION_MOJAVE, 0, 0)
149#define KERNEL_VERSION_CATALINA_MIN KERNEL_VERSION (KERNEL_VERSION_CATALINA, 0, 0)
150#define KERNEL_VERSION_BIG_SUR_MIN KERNEL_VERSION (KERNEL_VERSION_BIG_SUR, 0, 0)
151#define KERNEL_VERSION_MONTEREY_MIN KERNEL_VERSION (KERNEL_VERSION_MONTEREY, 0, 0)
152#define KERNEL_VERSION_VENTURA_MIN KERNEL_VERSION (KERNEL_VERSION_VENTURA, 0, 0)
153#define KERNEL_VERSION_SONOMA_MIN KERNEL_VERSION (KERNEL_VERSION_SONOMA, 0, 0)
154#define KERNEL_VERSION_SEQUOIA_MIN KERNEL_VERSION (KERNEL_VERSION_SEQUOIA, 0, 0)
159#define KERNEL_VERSION_TIGER_MAX (KERNEL_VERSION_LEOPARD_MIN - 1)
160#define KERNEL_VERSION_LEOPARD_MAX (KERNEL_VERSION_SNOW_LEOPARD_MIN - 1)
161#define KERNEL_VERSION_SNOW_LEOPARD_MAX (KERNEL_VERSION_LION_MIN - 1)
162#define KERNEL_VERSION_LION_MAX (KERNEL_VERSION_MOUNTAIN_LION_MIN - 1)
163#define KERNEL_VERSION_MOUNTAIN_LION_MAX (KERNEL_VERSION_MAVERICKS_MIN - 1)
164#define KERNEL_VERSION_MAVERICKS_MAX (KERNEL_VERSION_YOSEMITE_MIN - 1)
165#define KERNEL_VERSION_YOSEMITE_MAX (KERNEL_VERSION_EL_CAPITAN_MIN - 1)
166#define KERNEL_VERSION_EL_CAPITAN_MAX (KERNEL_VERSION_SIERRA_MIN - 1)
167#define KERNEL_VERSION_SIERRA_MAX (KERNEL_VERSION_HIGH_SIERRA_MIN - 1)
168#define KERNEL_VERSION_HIGH_SIERRA_MAX (KERNEL_VERSION_MOJAVE_MIN - 1)
169#define KERNEL_VERSION_MOJAVE_MAX (KERNEL_VERSION_CATALINA_MIN - 1)
170#define KERNEL_VERSION_CATALINA_MAX (KERNEL_VERSION_BIG_SUR_MIN - 1)
171#define KERNEL_VERSION_BIG_SUR_MAX (KERNEL_VERSION_MONTEREY_MIN - 1)
172#define KERNEL_VERSION_MONTEREY_MAX (KERNEL_VERSION_VENTURA_MIN - 1)
173#define KERNEL_VERSION_VENTURA_MAX (KERNEL_VERSION_SONOMA_MIN - 1)
174#define KERNEL_VERSION_SONOMA_MAX (KERNEL_VERSION_SEQUOIA_MIN - 1)
696 IN EFI_FILE_PROTOCOL *File,
697 IN BOOLEAN Prefer32Bit,
698 OUT BOOLEAN *Is32Bit,
700 OUT UINT32 *KernelSize,
701 OUT UINT32 *AllocatedSize,
702 IN UINT32 ReservedSize,
703 OUT UINT8 *Digest OPTIONAL
723 IN EFI_FILE_PROTOCOL *File,
724 IN BOOLEAN Prefer32Bit,
726 OUT UINT32 *MkextSize,
727 OUT UINT32 *AllocatedSize,
728 IN UINT32 ReservedSize,
729 IN UINT32 NumReservedKexts
742 IN CONST CHAR8 *String
755 IN CONST UINT8 *Kernel,
771 IN UINT32 CurrentVersion OPTIONAL,
772 IN UINT32 MinVersion OPTIONAL,
773 IN UINT32 MaxVersion OPTIONAL
792 IN OUT UINT8 *Prelinked,
793 IN UINT32 PrelinkedSize,
794 IN UINT32 PrelinkedAllocSize,
836 IN UINT32 LinkedExpansion,
837 IN UINT32 ReservedExeSize
866 IN OUT UINT32 *ReservedInfoSize,
867 IN OUT UINT32 *ReservedExeSize,
868 IN UINT32 InfoPlistSize,
869 IN UINT8 *Executable OPTIONAL,
870 IN UINT32 ExecutableSize OPTIONAL,
893 IN CONST CHAR8 *Identifier OPTIONAL,
894 IN CONST CHAR8 *BundlePath,
895 IN CONST CHAR8 *InfoPlist,
896 IN UINT32 InfoPlistSize,
897 IN CONST CHAR8 *ExecutablePath OPTIONAL,
898 IN OUT CONST UINT8 *Executable OPTIONAL,
899 IN UINT32 ExecutableSize OPTIONAL,
915 IN CONST CHAR8 *Identifier,
947 IN CONST CHAR8 *Identifier,
974 IN UINT32 SegmentSize
988 IN UINT32 SegChainSize,
989 IN UINT32 ReservedSize
1018 IN UINT64 SourceAddress
1049 IN CONST CHAR8 *Name OPTIONAL
1065 IN CONST CHAR8 *Name
1081 IN CONST CHAR8 *Name
1098 IN UINT32 BufferSize,
1114 IN CONST CHAR8 *Name,
1115 IN OUT UINT8 **Address
1130 IN CONST CHAR8 *Name,
1131 IN OUT UINT64 *Value
1147 IN CONST CHAR8 *Name,
1148 IN OUT UINT8 **Address,
1149 IN OUT UINT64 *Value
1177 IN CONST CHAR8 *Identifier,
1193 IN CONST CHAR8 *Identifier
1221 IN UINT64 LoadAddress,
1244 IN UINTN RegisterBase,
1245 IN UINT32 RegisterStride
1264 IN UINT32 *DataMask,
1299 IN CONST CHAR16 *FileName,
1300 IN EFI_FILE_PROTOCOL *ExtensionsDir,
1332 IN CONST CHAR8 *InfoPlist,
1333 IN UINT32 InfoPlistSize,
1334 IN UINT8 *Executable OPTIONAL,
1335 IN UINT32 ExecutableSize OPTIONAL,
1350 IN CONST CHAR8 *Identifier
1365 IN CONST CHAR8 *Identifier,
1395 IN CONST CHAR8 *Identifier,
1410 OUT EFI_FILE_PROTOCOL **File
1425 IN CONST CHAR16 *FileName,
1426 OUT EFI_FILE_PROTOCOL **VirtualFile
1442 IN CONST CHAR16 *FileName,
1443 IN EFI_FILE_PROTOCOL *File,
1444 OUT EFI_FILE_PROTOCOL **VirtualFile
1465 IN UINT32 BufferSize,
1466 IN UINT32 NumReservedKexts,
1467 IN OUT UINT8 *OutBuffer OPTIONAL,
1468 IN UINT32 OutBufferSize OPTIONAL,
1469 IN OUT UINT32 *OutMkextSize
1484 IN UINT32 MkextSize,
1506 IN OUT UINT8 *Mkext,
1507 IN UINT32 MkextSize,
1508 IN UINT32 MkextAllocSize
1535 IN OUT UINT32 *ReservedInfoSize,
1536 IN OUT UINT32 *ReservedExeSize,
1537 IN UINT32 InfoPlistSize,
1538 IN UINT8 *Executable OPTIONAL,
1539 IN UINT32 ExecutableSize OPTIONAL,
1561 IN CONST CHAR8 *Identifier OPTIONAL,
1562 IN CONST CHAR8 *BundlePath,
1563 IN CONST CHAR8 *InfoPlist,
1564 IN UINT32 InfoPlistSize,
1565 IN UINT8 *Executable OPTIONAL,
1566 IN UINT32 ExecutableSize OPTIONAL,
1582 IN CONST CHAR8 *Identifier,
1614 IN CONST CHAR8 *Identifier,
STATIC UINT32 KernelVersion
DMG_SIZE_DEVICE_PATH Size
VOID CachelessContextFree(IN OUT CACHELESS_CONTEXT *Context)
EFI_STATUS PrelinkedContextApplyPatch(IN OUT PRELINKED_CONTEXT *Context, IN CONST CHAR8 *Identifier, IN PATCHER_GENERIC_PATCH *Patch)
EFI_STATUS KcRebuildMachHeader(IN OUT PRELINKED_CONTEXT *Context)
EFI_STATUS PatcherGetSymbolValue(IN OUT PATCHER_CONTEXT *Context, IN CONST CHAR8 *Name, IN OUT UINT64 *Value)
UINT32 KcGetKextSize(IN PRELINKED_CONTEXT *Context, IN UINT64 SourceAddress)
EFI_STATUS CachelessContextHookBuiltin(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR16 *FileName, IN EFI_FILE_PROTOCOL *File, OUT EFI_FILE_PROTOCOL **VirtualFile)
EFI_STATUS ReadAppleKernel(IN EFI_FILE_PROTOCOL *File, IN BOOLEAN Prefer32Bit, OUT BOOLEAN *Is32Bit, OUT UINT8 **Kernel, OUT UINT32 *KernelSize, OUT UINT32 *AllocatedSize, IN UINT32 ReservedSize, OUT UINT8 *Digest OPTIONAL)
EFI_STATUS MkextContextApplyQuirk(IN OUT MKEXT_CONTEXT *Context, IN KERNEL_QUIRK_NAME Quirk, IN UINT32 KernelVersion)
enum KERNEL_CACHE_TYPE_ KERNEL_CACHE_TYPE
VOID PatchSetApfsTimeout(IN UINT32 Timeout)
EFI_STATUS PatcherBlockKext(IN OUT PATCHER_CONTEXT *Context)
VOID PrelinkedContextFree(IN OUT PRELINKED_CONTEXT *Context)
EFI_STATUS PatcherGetSymbolAddressValue(IN OUT PATCHER_CONTEXT *Context, IN CONST CHAR8 *Name, IN OUT UINT8 **Address, IN OUT UINT64 *Value)
EFI_STATUS PrelinkedDependencyInsert(IN OUT PRELINKED_CONTEXT *Context, IN VOID *Buffer)
EFI_STATUS CachelessContextPerformInject(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR16 *FileName, OUT EFI_FILE_PROTOCOL **VirtualFile)
EFI_STATUS KERNEL_QUIRK_PATCH_FUNCTION(IN OUT PATCHER_CONTEXT *Patcher OPTIONAL, IN UINT32 KernelVersion)
EFI_STATUS PatcherInitContextFromMkext(IN OUT PATCHER_CONTEXT *Context, IN OUT MKEXT_CONTEXT *Mkext, IN CONST CHAR8 *Name)
EFI_STATUS PatcherExcludePrelinkedKext(IN CONST CHAR8 *Identifier, IN OUT PATCHER_CONTEXT *PatcherContext, IN OUT PRELINKED_CONTEXT *PrelinkedContext)
EFI_STATUS PrelinkedContextInit(IN OUT PRELINKED_CONTEXT *Context, IN OUT UINT8 *Prelinked, IN UINT32 PrelinkedSize, IN UINT32 PrelinkedAllocSize, IN BOOLEAN Is32Bit)
EFI_STATUS KernelApplyQuirk(IN KERNEL_QUIRK_NAME Name, IN OUT PATCHER_CONTEXT *Patcher OPTIONAL, IN UINT32 KernelVersion)
EFI_STATUS PrelinkedInjectPrepare(IN OUT PRELINKED_CONTEXT *Context, IN UINT32 LinkedExpansion, IN UINT32 ReservedExeSize)
EFI_STATUS MkextContextBlock(IN OUT MKEXT_CONTEXT *Context, IN CONST CHAR8 *Identifier, IN BOOLEAN Exclude)
EFI_STATUS PrelinkedContextBlock(IN OUT PRELINKED_CONTEXT *Context, IN CONST CHAR8 *Identifier, IN BOOLEAN Exclude)
EFI_STATUS MkextInjectPatchComplete(IN OUT MKEXT_CONTEXT *Context)
VOID PatchSetPciSerialDevice(IN UINTN RegisterBase, IN UINT32 RegisterStride)
EFI_STATUS PatcherExcludeMkextKext(IN OUT MKEXT_CONTEXT *MkextContext, IN CONST CHAR8 *Identifier)
EFI_STATUS MkextReserveKextSize(IN OUT UINT32 *ReservedInfoSize, IN OUT UINT32 *ReservedExeSize, IN UINT32 InfoPlistSize, IN UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, IN BOOLEAN Is32Bit)
BOOLEAN MkextCheckCpuType(IN UINT8 *Mkext, IN UINT32 MkextSize, IN MACH_CPU_TYPE CpuType)
EFI_STATUS CachelessContextInit(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR16 *FileName, IN EFI_FILE_PROTOCOL *ExtensionsDir, IN UINT32 KernelVersion, IN BOOLEAN Is32Bit)
EFI_STATUS PatcherGetSymbolAddress(IN OUT PATCHER_CONTEXT *Context, IN CONST CHAR8 *Name, IN OUT UINT8 **Address)
#define MAX_INFO_BUNDLE_VERSION_KEY_SIZE
EFI_STATUS CachelessContextAddQuirk(IN OUT CACHELESS_CONTEXT *Context, IN KERNEL_QUIRK_NAME Quirk)
VOID KcKextIndexFixups(IN OUT PRELINKED_CONTEXT *Context, IN OC_MACHO_CONTEXT *MachContext)
EFI_STATUS ReadAppleMkext(IN EFI_FILE_PROTOCOL *File, IN BOOLEAN Prefer32Bit, OUT UINT8 **Mkext, OUT UINT32 *MkextSize, OUT UINT32 *AllocatedSize, IN UINT32 ReservedSize, IN UINT32 NumReservedKexts)
EFI_STATUS MkextContextApplyPatch(IN OUT MKEXT_CONTEXT *Context, IN CONST CHAR8 *Identifier, IN PATCHER_GENERIC_PATCH *Patch)
EFI_STATUS CachelessContextAddKext(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR8 *InfoPlist, IN UINT32 InfoPlistSize, IN UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, OUT CHAR8 BundleVersion[MAX_INFO_BUNDLE_VERSION_KEY_SIZE] OPTIONAL)
EFI_STATUS CachelessContextForceKext(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR8 *Identifier)
BOOLEAN OcMatchDarwinVersion(IN UINT32 CurrentVersion OPTIONAL, IN UINT32 MinVersion OPTIONAL, IN UINT32 MaxVersion OPTIONAL)
EFI_STATUS PrelinkedContextApplyQuirk(IN OUT PRELINKED_CONTEXT *Context, IN KERNEL_QUIRK_NAME Quirk, IN UINT32 KernelVersion)
VOID MkextContextFree(IN OUT MKEXT_CONTEXT *Context)
EFI_STATUS PrelinkedReserveKextSize(IN OUT UINT32 *ReservedInfoSize, IN OUT UINT32 *ReservedExeSize, IN UINT32 InfoPlistSize, IN UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, IN BOOLEAN Is32Bit)
EFI_STATUS PrelinkedInjectKext(IN OUT PRELINKED_CONTEXT *Context, IN CONST CHAR8 *Identifier OPTIONAL, IN CONST CHAR8 *BundlePath, IN CONST CHAR8 *InfoPlist, IN UINT32 InfoPlistSize, IN CONST CHAR8 *ExecutablePath OPTIONAL, IN OUT CONST UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, OUT CHAR8 BundleVersion[MAX_INFO_BUNDLE_VERSION_KEY_SIZE] OPTIONAL)
EFI_STATUS CachelessContextOverlayExtensionsDir(IN OUT CACHELESS_CONTEXT *Context, OUT EFI_FILE_PROTOCOL **File)
EFI_STATUS PatcherApplyGenericPatch(IN OUT PATCHER_CONTEXT *Context, IN PATCHER_GENERIC_PATCH *Patch)
EFI_STATUS MkextContextInit(IN OUT MKEXT_CONTEXT *Context, IN OUT UINT8 *Mkext, IN UINT32 MkextSize, IN UINT32 MkextAllocSize)
EFI_STATUS MkextInjectKext(IN OUT MKEXT_CONTEXT *Context, IN CONST CHAR8 *Identifier OPTIONAL, IN CONST CHAR8 *BundlePath, IN CONST CHAR8 *InfoPlist, IN UINT32 InfoPlistSize, IN UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, OUT CHAR8 BundleVersion[MAX_INFO_BUNDLE_VERSION_KEY_SIZE] OPTIONAL)
EFI_STATUS KcInitKextFixupChains(IN OUT PRELINKED_CONTEXT *Context, IN UINT32 SegChainSize, IN UINT32 ReservedSize)
EFI_STATUS PatchProvideCurrentCpuInfo(IN OUT PATCHER_CONTEXT *Patcher, IN OC_CPU_INFO *CpuInfo, IN UINT32 KernelVersion)
EFI_STATUS MkextDecompress(IN CONST UINT8 *Buffer, IN UINT32 BufferSize, IN UINT32 NumReservedKexts, IN OUT UINT8 *OutBuffer OPTIONAL, IN UINT32 OutBufferSize OPTIONAL, IN OUT UINT32 *OutMkextSize)
UINT32 OcKernelReadDarwinVersion(IN CONST UINT8 *Kernel, IN UINT32 KernelSize)
UINT32 OcParseDarwinVersion(IN CONST CHAR8 *String)
EFI_STATUS CachelessContextAddPatch(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR8 *Identifier, IN PATCHER_GENERIC_PATCH *Patch)
EFI_STATUS CachelessContextBlock(IN OUT CACHELESS_CONTEXT *Context, IN CONST CHAR8 *Identifier, IN BOOLEAN Exclude)
EFI_STATUS KcKextApplyFileDelta(IN PRELINKED_CONTEXT *PrelinkedContext, IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Delta)
@ KernelQuirkDisableRtcChecksum
@ KernelQuirkPanicNoKextDump
@ KernelQuirkCustomSmbiosGuid1
@ KernelQuirkForceSecureBootScheme
@ KernelQuirkPowerTimeoutKernelPanic
@ KernelQuirkLapicKernelPanic
@ KernelQuirkCustomSmbiosGuid2
@ KernelQuirkAppleCpuPmCfgLock
@ KernelQuirkAppleXcpmExtraMsrs
@ KernelQuirkAppleXcpmForceBoost
@ KernelQuirkXhciPortLimit2
@ KernelQuirkSetApfsTrimTimeout
@ KernelQuirkThirdPartyDrives
@ KernelQuirkDisableIoMapperMapping
@ KernelQuirkAppleXcpmCfgLock
@ KernelQuirkDummyPowerManagement
@ KernelQuirkDisableIoMapper
@ KernelQuirkLegacyCommpage
@ KernelQuirkExternalDiskIcons
@ KernelQuirkXhciPortLimit1
@ KernelQuirkExtendBTFeatureFlags
@ KernelQuirkForceAquantiaEthernet
@ KernelQuirkXhciPortLimit3
@ KernelQuirkSegmentJettison
@ KernelQuirkIncreasePciBarSize
@ KernelQuirkCustomPciSerialDevice
EFI_STATUS PatcherInitContextFromBuffer(IN OUT PATCHER_CONTEXT *Context, IN OUT UINT8 *Buffer, IN UINT32 BufferSize, IN BOOLEAN Use32Bit)
UINT64 KcFixupValue(IN UINT64 Value, IN CONST CHAR8 *Name OPTIONAL)
EFI_STATUS PatcherInitContextFromPrelinked(IN OUT PATCHER_CONTEXT *Context, IN OUT PRELINKED_CONTEXT *Prelinked, IN CONST CHAR8 *Name)
EFI_STATUS PrelinkedInjectComplete(IN OUT PRELINKED_CONTEXT *Context)
BOOLEAN KextFindKmodAddress(IN OC_MACHO_CONTEXT *ExecutableContext, IN UINT64 LoadAddress, IN UINT32 Size, OUT UINT64 *Kmod)
UINT32 KcGetSegmentFixupChainsSize(IN UINT32 SegmentSize)
EFI_STATUS PatchKernelCpuId(IN OUT PATCHER_CONTEXT *Patcher, IN OC_CPU_INFO *CpuInfo, IN UINT32 *Data, IN UINT32 *DataMask, IN UINT32 KernelVersion)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
LIST_ENTRY InjectedDependencies
BOOLEAN BuiltInKextsValid
CONST CHAR16 * ExtensionsDirFileName
EFI_FILE_PROTOCOL * ExtensionsDir
KERNEL_QUIRK_PATCH_FUNCTION * PatchFunction
XML_DOCUMENT * MkextInfoDocument
MKEXT_HEADER_ANY * MkextHeader
OC_MACHO_CONTEXT MachContext
BOOLEAN IsKernelCollection
CONST UINT8 * ReplaceMask
MACH_SEGMENT_COMMAND_64 * InnerInfoSegment
UINT64 PrelinkedLastLoadAddress
UINT64 PrelinkedLastAddress
MACH_SECTION_ANY * PrelinkedStateSectionKexts
MACH_SEGMENT_COMMAND_ANY * PrelinkedTextSegment
MACH_SEGMENT_COMMAND_ANY * LinkEditSegment
MACH_SEGMENT_COMMAND_ANY * PrelinkedStateSegment
OC_MACHO_CONTEXT InnerMachContext
UINT32 PooledBuffersCount
UINT32 PrelinkedStateKernelSize
LIST_ENTRY PrelinkedKexts
VOID * PrelinkedStateKexts
MACH_SEGMENT_COMMAND_ANY * PrelinkedInfoSegment
MACH_DYLD_CHAINED_STARTS_IN_SEGMENT * KextsFixupChains
MACH_SECTION_64 * InnerInfoSection
UINT32 PrelinkedAllocSize
UINT64 PrelinkedStateKextsAddress
UINT32 PrelinkedStateKextsSize
OC_MACHO_CONTEXT PrelinkedMachContext
XML_DOCUMENT * PrelinkedInfoDocument
BOOLEAN IsKernelCollection
MACH_SECTION_ANY * PrelinkedInfoSection
VOID * PrelinkedStateKernel
MACH_SECTION_ANY * PrelinkedTextSection
UINT32 PooledBuffersAllocCount
MACH_SECTION_ANY * PrelinkedStateSectionKernel
CHAR8 * KextScratchBuffer
MACH_SEGMENT_COMMAND_64 * RegionSegment