#include <CoreFoundation/CoreFoundation.h>
#include <DiskImages/DIHLInterface.h>
typedef OSStatus _dihlDiskImageCreateProc(CFDictionaryRef inOptions, DIHLStatusProcPtr inStatusProc, void *inContext,
CFDictionaryRef *outResults);
typedef OSStatus _dihlDiskImageAttachProc(CFDictionaryRef inOptions, DIHLStatusProcPtr inStatusProc, void *inContext,
CFDictionaryRef *outResults);
typedef OSStatus _dihlDiskImageChangePasswordProc(CFDictionaryRef inOptions);
typedef OSStatus _dihlDiskImageCompactProc(CFDictionaryRef inOptions, void *inContext, DIHLStatusProcPtr inStatusProc);
typedef int _dihlDIInitializeProc();
typedef void _dihlDIDeinitializeProc();
class FVDIHLInterface
{
private:
static bool instanceFlag;
static FVDIHLInterface *fvdihlInterface;
FVDIHLInterface() : _dihlDiskImageCreate(NULL), _dihlDiskImageAttach(NULL), _dihlDiskImageChangePassword(NULL),
_dihlDIInitialize(NULL), _dihlDIDeinitialize(NULL) {}; public:
static FVDIHLInterface* getInstance();
~FVDIHLInterface() { instanceFlag = false; }
static _dihlDiskImageCreateProc *DIHLDiskImageCreate() { return getInstance()->_dihlDiskImageCreate; }
static _dihlDiskImageAttachProc *DIHLDiskImageAttach() { return getInstance()->_dihlDiskImageAttach; }
static _dihlDiskImageCompactProc *DIHLDiskImageCompact() { return getInstance()->_dihlDiskImageCompact; }
static _dihlDIInitializeProc *DIInitialize() { return getInstance()->_dihlDIInitialize; }
static _dihlDIDeinitializeProc *DIDeinitialize() { return getInstance()->_dihlDIDeinitialize; }
static _dihlDiskImageChangePasswordProc *DIHLDiskImageChangePassword() { return getInstance()->_dihlDiskImageChangePassword; }
private:
bool loadDiskImagesFramework();
_dihlDiskImageCreateProc *_dihlDiskImageCreate;
_dihlDiskImageAttachProc *_dihlDiskImageAttach;
_dihlDiskImageChangePasswordProc *_dihlDiskImageChangePassword;
_dihlDiskImageCompactProc *_dihlDiskImageCompact;
_dihlDIInitializeProc *_dihlDIInitialize;
_dihlDIDeinitializeProc *_dihlDIDeinitialize;
};