macos prevent disk mounting

#include <CoreServices/CoreServices.h>
#include <DiskArbitration/DiskArbitration.h>

void diskMountCallback(DADiskRef disk, DADissenterRef dissenter, void *context) {
    if (dissenter != NULL) {
        // Disk mounting prevented, handle accordingly
        // Add your code here to perform actions when mounting is prevented
    } else {
        // Disk mounted successfully, add your code here if needed
    }
}

void preventDiskMounting() {
    DASessionRef session = DASessionCreate(kCFAllocatorDefault);
    if (session == NULL) {
        // Handle session creation failure
        return;
    }

    CFDictionaryRef matchDict = DADiskCreateMatchDictionary(kCFAllocatorDefault, kDADiskTypeWhole);
    if (matchDict == NULL) {
        // Handle match dictionary creation failure
        CFRelease(session);
        return;
    }

    DAApprovalCallback approvalCallback = NULL; // No approval needed for preventing mount
    DADiskMountApproval sessionApproval = kDADiskMountApprovalNone;
    DARegisterDiskMountApprovalCallback(session, matchDict, sessionApproval, approvalCallback, NULL);

    DADiskAppearedCallback appearedCallback = diskMountCallback;
    DARegisterDiskAppearedCallback(session, matchDict, appearedCallback, NULL);

    CFRunLoopRun();

    // Cleanup
    CFRelease(matchDict);
    CFRelease(session);
}

int main() {
    preventDiskMounting();
    return 0;
}