#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;
}