#ifndef __KXKEXTMANAGER_H__
#define __KXKEXTMANAGER_H__
#ifdef __cplusplus
extern "C" {
#endif
#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, kKXKextManagerErrorLinkLoad
} KXKextManagerError;
typedef enum {
kKXKextManagerLogLevelNone = 0,
kKXKextManagerLogLevelBasic = 1,
kKXKextManagerLogLevelLoadBasic = 2,
kKXKextManagerLogLevelDetails = 3,
kKXKextManagerLogLevelKexts = 4,
kKXKextManagerLogLevelKextDetails = 5,
kKXKextManagerLogLevelLoadDetails = 6
} KXKextManagerLogLevel;
#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);
KXKextManagerError KXKextManagerAddRepositoryDirectory(
KXKextManagerRef aKextManager,
CFURLRef directoryURL,
Boolean scanForKexts,
Boolean useCache,
KXKextRepositoryRef * theRepository);
KXKextManagerError KXKextManagerAddRepositoryFromCacheFile(
KXKextManagerRef aKextManager,
CFURLRef fileURL,
KXKextRepositoryRef * theRepository);
KXKextManagerError KXKextManagerAddRepositoryFromCacheDictionary(
KXKextManagerRef aKextManager,
CFDictionaryRef aRepositoryCache,
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);
CFArrayRef 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);
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 interactive,
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
#ifdef __cplusplus
}
#endif
#endif __KXKEXTMANAGER_H__