Re: auto mounting a partition with nobrowse
Re: auto mounting a partition with nobrowse
- Subject: Re: auto mounting a partition with nobrowse
- From: Kevin Elliott <email@hidden>
- Date: Thu, 13 May 2010 10:48:29 -0700
> Using DiskArbitration seems to offer the results I need so I started coding a little test app but due to the lack of sample code I'm not sure I'm doing any of it properly since it segfaults when I use DADiskMountWithArguments().
Reread here:
<http://developer.apple.com/mac/library/documentation/Darwin/Reference/DiscArbitrationFramework/DiskArbitration_h/index.html#//apple_ref/c/func/DADiskMountWithArguments>
Last argument is a NULL terminated array, which you're not providing.
-Kevin
On May 13, 2010, at 2:29 AM, websrvr wrote:
>
> On May 12, 2010, at 21:20 PM, Daniel Markarian wrote:
>
>> Hey Dale,
>>
>> Does /sbin/mount show "nobrowse" on 10.6?
>>
>> Dan
>>
>> PS: You can run the 10.6 version of /sbin/mount on 10.5 to check the state of "nobrowse" on 10.5 as well.
>
> Hey Dan,
>
> The 10.6.2 version of mount doesn't run in 10.5.6.
>
> In 10.6 it does show the nobrowse but in the left side of the finder window I can see the partition (it's grayed out) but only seems to do this if there are existing finder windows open, if all windows are closed then the partitions are not visible at all.
>
> Depending on the existence of the fstab file to do the hiding is a poor solution since I cannot guarantee the user will plug the drive only into systems that have it.
>
> Using DiskArbitration seems to offer the results I need so I started coding a little test app but due to the lack of sample code I'm not sure I'm doing any of it properly since it segfaults when I use DADiskMountWithArguments().
>
> Here's the code:
>
> // test_mount.m
> // gcc -Wall -o test_mount test_mount.m -framework DiskArbitration -framework Foundation
>
> #import <Foundation/Foundation.h>
> #import <DiskArbitration/DiskArbitration.h>
>
> #define _NO_ARGS_ 1
>
> /* guessing due to lack of sample code */
> DADissenterRef
> MountDiskHidden(DADiskRef disk, void *context)
> {
> char const *CdiskName = DADiskGetBSDName(disk);
> NSString *diskName = [NSString stringWithUTF8String:CdiskName];
> NSRange s1s1NumberRange = NSMakeRange([diskName length] - 4, 4);
> DADissenterRef dissenter;
> char *type;
>
> if([[diskName substringWithRange:s1s1NumberRange] isEqualToString:@"s1s1"]) /* it's our magic partition */
> {
>
> #if _NO_ARGS_
> DADiskMount(disk,
> NULL,
> kDADiskMountOptionDefault,
> NULL,
> NULL);
> #else
> CFStringRef arguments = CFStringCreateWithCString(kCFAllocatorDefault, "nobrowse", kCFStringEncodingUTF8);
>
> /* using this causes a segfault */
> DADiskMountWithArguments(disk,
> NULL,
> kDADiskMountOptionDefault,
> NULL,
> NULL,
> &arguments);
> #endif
>
> dissenter = DADissenterCreate(kCFAllocatorDefault,
> kDAReturnSuccess,
> CFSTR("mounted hidden"));
>
> type = "mounted hidden";
> }
> else
> {
> DADiskMount(disk,
> NULL,
> kDADiskMountOptionDefault,
> NULL,
> NULL);
>
> dissenter = DADissenterCreate(kCFAllocatorDefault,
> kDAReturnSuccess,
> CFSTR("mount not permitted"));
>
> type = "mounted normal";
> }
>
> printf("%s: %s\n", CdiskName, type);
>
> return dissenter;
> }
>
> /* This should really be daemonized but should suffice for test purposes */
> int
> main (int argc, const char * argv[])
> {
> NSAutoreleasePool *pool = [NSAutoreleasePool new];
> DAApprovalSessionRef session = DAApprovalSessionCreate(kCFAllocatorDefault);
>
> if (!session)
> {
> fprintf(stderr, "failed to create Disk Arbitration session");
> goto out;
> }
>
> DARegisterDiskMountApprovalCallback(session,
> NULL, // matches all disk objects
> MountDiskHidden,
> NULL); // context
>
> DAApprovalSessionScheduleWithRunLoop(session,
> CFRunLoopGetCurrent(),
> kCFRunLoopDefaultMode);
>
> CFRunLoopRunInMode(kCFRunLoopDefaultMode,
> 45 /* seconds */,
> false);
>
> DAApprovalSessionUnscheduleFromRunLoop(session,
> CFRunLoopGetCurrent(),
> kCFRunLoopDefaultMode);
>
> DAUnregisterApprovalCallback(session,
> MountDiskHidden,
> NULL);
>
> out:
> if (session)
> CFRelease(session);
>
> [pool release];
>
> exit(0);
> }
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Filesystem-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Filesystem-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden