#ifndef __KEXTD_H_
#define __KEXTD_H_
#include <IOKit/kext/KEXTManager.h>
#if defined(__cplusplus)
extern "C" {
#endif
typedef struct __KEXTD * KEXTDRef;
typedef enum {
kKEXTBootlevelNormal = 0x00,
kKEXTBootlevelExempt = 0x01,
kKEXTBootlevelRecovery = 0x02,
kKEXTBootlevelSingleUser = 0x04,
kKEXTBootlevelFlexible = 0x08,
kKEXTBootlevelRequired = 0x10,
} KEXTBootlevel;
typedef enum {
kKEXTEventReset,
kKEXTEventModuleRequest,
kKEXTEventPersonalityRequest,
kKEXTEventBundleAuthenticationFailed,
} KEXTEvent;
typedef struct {
CFIndex version;
void * (*HelperInitialize)(KEXTDRef kextd);
void (*HelperFinalize)(void * context);
void (*DaemonDidFinishLaunching)(void * context);
void (*DaemonWillTerminate)(void * context);
Boolean (*BundleAdd)(KEXTBundleRef bundle, void * context);
Boolean (*BundleRemove)(KEXTBundleRef bundle, void * context);
void (*EventOccurred)(KEXTEvent event, CFTypeRef data, void * context);
Boolean (*ModuleWillLoad)(KEXTModuleRef module, void * context);
void (*ModuleWasLoaded)(KEXTModuleRef module, void * context);
KEXTReturn (*ModuleLoadError)(KEXTModuleRef module, KEXTReturn error, void * context);
} KEXTDHelperCallbacks;
KEXTDRef KEXTDCreate(CFArrayRef scanPaths, KEXTReturn * error);
void KEXTDFree(KEXTDRef kextd);
void KEXTDHangup(KEXTDRef kextd);
void KEXTDReset(KEXTDRef kextd);
#if TIMERSOURCE
KEXTReturn KEXTDStartMain(KEXTDRef kextd, Boolean beVerbose, Boolean safeBoot, Boolean debug, Boolean poll, CFIndex period, KEXTBootlevel bootlevel);
#else
KEXTReturn KEXTDStartMain(KEXTDRef kextd, Boolean beVerbose, Boolean safeBoot, Boolean debug, KEXTBootlevel bootlevel);
#endif
void KEXTDScanPaths(KEXTDRef kextd);
void KEXTDAddScanPath(KEXTDRef kextd, CFURLRef path);
void KEXTDRegisterHelperCallbacks(KEXTDRef kextd, KEXTDHelperCallbacks * callbacks);
KEXTReturn KEXTDKernelRequest(KEXTDRef kextd, CFStringRef moduleName);
KEXTReturn KEXTDLoadModule(KEXTDRef kextd, CFStringRef moduleName);
#if defined(__cplusplus)
}
#endif
#endif __KEXTD_H_