#ifndef _KEXT_AUDIT_H_
#define _KEXT_AUDIT_H_
#include <stdint.h>
#include <IOKit/IOLib.h>
#include <IOKit/IOLocks.h>
#include <IOKit/IOService.h>
#include <IOKit/smc/AppleSMCFamily.h>
#include <MultiverseSupport/kext_audit_plugin_common.h>
#include "efi_smc.h"
#ifdef DEBUG
#define DEBUG_LOG(fmt, ...) IOLog("%s, in %s, line %d: " fmt "\n", "KextAudit",\
__func__, __LINE__, ##__VA_ARGS__)
#else
#define DEBUG_LOG(fmt, ...)
#endif
#define kKextAuditPollIntervalMs 2
#define kKextAuditUserAccessEntitlement "com.apple.private.KextAudit.user-access"
class KextAudit : public IOService
{
OSDeclareDefaultStructors(KextAudit)
public:
virtual bool init(OSDictionary *dictionary) override;
virtual void free(void) override;
virtual IOService *probe(IOService *provider, SInt32 *score) override;
virtual bool start(IOService *provider) override;
virtual void stop(IOService *provider) override;
virtual bool terminate(IOOptionBits options) override;
bool notifyBridgeWithReplySync(struct KextAuditLoadNotificationKext *kaln,
struct KextAuditBridgeResponse *kabr);
bool testBridgeConnection(struct KextAuditBridgeResponse *kabr);
private:
AppleSMCFamily *fSMCDriver;
IOLock *_kalnLock;
};
#endif