#ifndef __KXKEXTMANAGER_H__
#define __KXKEXTMANAGER_H__
#include <sys/cdefs.h>
__BEGIN_DECLS
#include <CoreFoundation/CoreFoundation.h>
typedef struct __KXKextManager * KXKextManagerRef;
typedef enum {
kKXKextManagerErrorNone = 0,
kKXKextManagerErrorUnspecified,
kKXKextManagerErrorInvalidArgument,
kKXKextManagerErrorNoMemory,
kKXKextManagerErrorFileAccess,
kKXKextManagerErrorNotADirectory,
kKXKextManagerErrorDiskFull,
kKXKextManagerErrorSerialization,
kKXKextManagerErrorCompression,
kKXKextManagerErrorIPC,
kKXKextManagerErrorChildTask,
kKXKextManagerErrorUserAbort,
kKXKextManagerErrorKernelError,
kKXKextManagerErrorKernelResource,
kKXKextManagerErrorKernelPermission,
kKXKextManagerErrorCache,
kKXKextManagerErrorKextNotFound,
kKXKextManagerErrorURLNotInRepository,
kKXKextManagerErrorNotABundle, kKXKextManagerErrorNotAKext, kKXKextManagerErrorValidation, kKXKextManagerErrorBootLevel, kKXKextManagerErrorDisabled,
kKXKextManagerErrorAuthentication, kKXKextManagerErrorDependency, kKXKextManagerErrorDependencyLoop, kKXKextManagerErrorLoadExecutableBad, kKXKextManagerErrorLoadExecutableNoArch, kKXKextManagerErrorAlreadyLoaded,
kKXKextManagerErrorLoadedVersionDiffers, kKXKextManagerErrorDependencyLoadedVersionDiffers, kKXKextManagerErrorLinkLoad,
kKXKextManagerErrorKextHasNoReceipt,
kKXKextManagerErrorKextIsModified,
kKXKextManagerErrorLoadKernelComponent
} KXKextManagerError;
typedef enum {
kKXKextManagerLogLevelSilent = -2, kKXKextManagerLogLevelErrorsOnly = -1,
kKXKextManagerLogLevelDefault = 0,
kKXKextManagerLogLevelBasic = 1,
kKXKextManagerLogLevelLoadBasic = 2,
kKXKextManagerLogLevelDetails = 3,
kKXKextManagerLogLevelKexts = 4,
kKXKextManagerLogLevelKextDetails = 5,
kKXKextManagerLogLevelLoadDetails = 6
} KXKextManagerLogLevel;
#if !__LP64__
#include "KXKext.h"
#include "KXKextRepository.h"
#define kKXSystemExtensionsFolder (CFSTR("/System/Library/Extensions"))
#define kKXKextRepositoryCacheExtension (CFSTR("kextcache"))
CFStringRef KXKextManagerErrorStringForError(KXKextManagerError error);
const char * KXKextManagerErrorStaticCStringForError(KXKextManagerError error);
CFTypeID KXKextManagerGetTypeID(void);
KXKextManagerRef KXKextManagerCreate(CFAllocatorRef alloc);
KXKextManagerError KXKextManagerInit(
KXKextManagerRef aKextManager,
Boolean loadInTaskFlag,
Boolean safeBootFlag);
void KXKextManagerSetLogLevel(
KXKextManagerRef aKextManager,
SInt32 level);
SInt32 KXKextManagerGetLogLevel(
KXKextManagerRef aKextManager);
void KXKextManagerSetLogFunction(
KXKextManagerRef aKextManager,
void (*func)(const char * format, ...));
void KXKextManagerSetErrorLogFunction(
KXKextManagerRef aKextManager,
void (*func)(const char * format, ...));
void KXKextManagerSetUserApproveFunction(
KXKextManagerRef aKextManager,
int (*func)(int defaultAnswer, const char * format, ...));
void KXKextManagerSetUserVetoFunction(
KXKextManagerRef aKextManager,
int (*func)(int defaultAnswer, const char * format, ...));
void KXKextManagerSetUserInputFunction(
KXKextManagerRef aKextManager,
const char * (*func)(const char * format, ...));
Boolean KXKextManagerGetSafeBootMode(KXKextManagerRef aKextManager);
void KXKextManagerSetSafeBootMode(KXKextManagerRef aKextManager,
Boolean flag);
Boolean KXKextManagerGetPerformLoadsInTask(KXKextManagerRef aKextManager);
void KXKextManagerSetPerformLoadsInTask(KXKextManagerRef aKextManager,
Boolean flag);
Boolean KXKextManagerPerformsFullTests(KXKextManagerRef aKextManager);
void KXKextManagerSetPerformsFullTests(KXKextManagerRef aKextManager,
Boolean flag);
Boolean KXKextManagerWillUpdateCatalog(KXKextManagerRef aKextManager);
void KXKextManagerSetWillUpdateCatalog(KXKextManagerRef aKextManager,
Boolean flag);
KXKextManagerError KXKextManagerSendAllKextPersonalitiesToCatalog(
KXKextManagerRef aKextManager);
KXKextManagerError KXKextManagerAddRepositoryDirectory(
KXKextManagerRef aKextManager,
CFURLRef directoryURL,
Boolean scanForKexts,
Boolean useCache,
KXKextRepositoryRef * theRepository);
void KXKextManagerRemoveRepositoryDirectory(
KXKextManagerRef aKextManager,
CFURLRef directoryURL);
CFArrayRef KXKextManagerGetRepositories(KXKextManagerRef aKextManager);
KXKextRepositoryRef KXKextManagerGetRepositoryForDirectory(
KXKextManagerRef aKextManager,
CFURLRef aDirectory);
void KXKextManagerResetAllRepositories(KXKextManagerRef aKextManager);
KXKextManagerError KXKextManagerAddKextWithURL(
KXKextManagerRef aKextManager,
CFURLRef kextURL,
Boolean includePlugins,
KXKextRef * theKext); void KXKextManagerRemoveKext(
KXKextManagerRef aKextManager,
KXKextRef aKext);
KXKextManagerError KXKextManagerRescanKext(
KXKextManagerRef aKextManager,
KXKextRef aKext, Boolean scanForPlugins,
KXKextRef * rescannedKext);
void KXKextManagerDisqualifyKext(KXKextManagerRef aKextManager,
KXKextRef aKext);
void KXKextManagerRequalifyKext(KXKextManagerRef aKextManager,
KXKextRef aKext);
void KXKextManagerCalculateVersionRelationships(KXKextManagerRef aKextManager);
void KXKextManagerResolveAllKextDependencies(KXKextManagerRef aKextManager);
void KXKextManagerClearRelationships(KXKextManagerRef aKextManager);
void KXKextManagerEnableClearRelationships(KXKextManagerRef aKextManager);
void KXKextManagerDisableClearRelationships(KXKextManagerRef aKextManager);
KXKextRepositoryRef KXKextManagerGetRepositoryWithURL(
KXKextManagerRef aKextManager,
CFURLRef anURL);
KXKextRepositoryRef KXKextManagerGetRepositoryForKextWithURL(
KXKextManagerRef aKextManager,
CFURLRef anURL);
KXKextRef KXKextManagerGetKextWithURL(
KXKextManagerRef aKextManager,
CFURLRef anURL);
KXKextRef KXKextManagerGetKextWithIdentifier(KXKextManagerRef aKextManager,
CFStringRef identifier);
KXKextRef KXKextManagerGetLoadedOrLatestKextWithIdentifier(
KXKextManagerRef aKextManager,
CFStringRef identifier);
KXKextRef KXKextManagerGetKextWithIdentifierAndVersionString(
KXKextManagerRef aKextManager,
CFStringRef identifier,
CFStringRef versionString);
KXKextRef KXKextManagerGetKextWithIdentifierCompatibleWithVersionString(
KXKextManagerRef aKextManager,
CFStringRef identifier,
CFStringRef versionString);
CFArrayRef KXKextManagerCopyKextsWithIdentifier(KXKextManagerRef aKextManager,
CFStringRef identifier);
CFMutableArrayRef KXKextManagerCopyAllKexts(KXKextManagerRef aKextManager);
CFArrayRef KXKextManagerGetKextsWithMissingDependencies(
KXKextManagerRef aKextManager);
CFArrayRef KXKextManagerCopyAllKextPersonalities(
KXKextManagerRef aKextManager);
void KXKextManagerAuthenticateKexts(KXKextManagerRef aKextManager);
void KXKextManagerMarkKextsAuthentic(KXKextManagerRef aKextManager);
Boolean KXKextManagerPerformsStrictAuthentication(
KXKextManagerRef aKextManager);
void KXKextManagerSetPerformsStrictAuthentication(
KXKextManagerRef aKextManager,
Boolean flag);
void KXKextManagerVerifyIntegrityOfAllKexts(KXKextManagerRef aKextManager);
KXKextManagerError KXKextManagerCheckForLoadedKexts(
KXKextManagerRef aKextManager);
KXKextManagerError KXKextManagerLoadKext(
KXKextManagerRef aKextManager,
KXKextRef aKext);
KXKextManagerError KXKextManagerLoadKextWithIdentifier(
KXKextManagerRef aKextManager,
CFStringRef identifier);
KXKextManagerError KXKextManagerLoadKextUsingOptions(
KXKextManagerRef aKextManager,
KXKextRef aKext,
const char * kext_name,
const char * kernel_file,
const char * patch_dir,
const char * symbol_dir,
Boolean check_loaded_for_dependencies,
Boolean do_load,
Boolean do_start_kext,
int interactive_level, Boolean ask_overwrite_symbols, Boolean overwrite_symbols, Boolean get_addrs_from_kernel,
unsigned int num_addresses, char ** addresses);
KXKextManagerError KXKextManagerSendKextPersonalitiesToCatalog(
KXKextManagerRef aKextManager,
KXKextRef aKext,
CFArrayRef personalityNames ,
Boolean includeDependencies,
int interactiveLevel,
Boolean safeBoot);
KXKextManagerError KXKextManagerSendPersonalitiesToCatalog(
KXKextManagerRef aKextManager,
CFArrayRef personalities);
void KXKextManagerRemoveKextPersonalitiesFromCatalog(
KXKextManagerRef aKextManager,
KXKextRef aKext);
KXKextManagerError KXKextManagerRemovePersonalitiesFromCatalog(
KXKextManagerRef aKextManager,
CFDictionaryRef matchingPersonality);
#if 0
CFArrayRef KXKextManagerCopyPersonalitiesForClassMatch(
KXKextManagerRef aKextManager,
CFStringRef classMatchString);
#endif 0
#endif // !__LP64__
__END_DECLS
#endif __KXKEXTMANAGER_H__