1/* 2 * Copyright (c) 1998-2013 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#ifndef __DISKARBITRATION_DISKARBITRATIONPRIVATE__ 25#define __DISKARBITRATION_DISKARBITRATIONPRIVATE__ 26 27#include <dispatch/dispatch.h> 28#include <CoreFoundation/CoreFoundation.h> 29#include <DiskArbitration/DiskArbitration.h> 30 31#ifdef __cplusplus 32extern "C" { 33#endif /* __cplusplus */ 34 35#ifndef __DISKARBITRATIOND__ 36#ifndef __LP64__ 37 38#include <mach/mach.h> 39 40enum 41{ 42 kDA_DISK_APPEARED = 1, 43 kDA_DISK_UNMOUNT_PRE_NOTIFY = 2, 44 kDA_DISK_UNMOUNT_POST_NOTIFY = 3, 45 kDA_DISK_EJECT_PRE_NOTIFY = 4, 46 kDA_DISK_EJECT_POST_NOTIFY = 5, 47 kDA_CLIENT_DISCONNECTED = 6, 48 kDA_DISK_CHANGED = 7, 49 kDA_NOTIFICATIONS_COMPLETE = 8, 50 kDA_WILL_CLIENT_RELEASE_DEVICE = 9, 51 kDA_DEVICE_RESERVATION_STATUS = 10, 52 kDA_CLIENT_WILL_HANDLE_UNRECOGNIZED_DISK = 11, 53 kDA_DISK_APPEARED1 = 12, 54 kDA_DISK_APPEARED_WITH_MT = 13, 55 kDA_DISK_WILL_BE_CHECKED = 21, 56 kDA_CALL_FAILED = 22, 57 kDA_CALL_SUCCEEDED = 23, 58 kDA_DISK_APPROVAL_NOTIFY = 24, 59 kDA_DISK_APPEARED_COMPLETE = 25 60}; 61 62enum 63{ 64 kDiskArbDeviceIsReserved = 0, 65 kDiskArbDeviceIsNotReserved = 1, 66 kDiskArbDeviceReservationObtained = 2, 67 kDiskArbDeviceReservationRefused = 3 68}; 69 70enum 71{ 72 kDiskArbDiskAppearedLockedMask = 1 << 0, 73 kDiskArbDiskAppearedEjectableMask = 1 << 1, 74 kDiskArbDiskAppearedWholeDiskMask = 1 << 2, 75 kDiskArbDiskAppearedNetworkDiskMask = 1 << 3, 76 kDiskArbDiskAppearedBeingCheckedMask = 1 << 4, 77 kDiskArbDiskAppearedNonLeafDiskMask = 1 << 5, 78 kDiskArbDiskAppearedCDROMMask = 1 << 6, 79 kDiskArbDiskAppearedDVDROMMask = 1 << 7, 80 kDiskArbDiskAppearedUnrecognizableFormat = 1 << 8, 81 kDiskArbDiskAppearedUnrecognizableSection = 1 << 9, 82 kDiskArbDiskAppearedRecognizableSectionMounted = 1 << 10, 83 kDiskArbDiskAppearedDialogDisplayed = 1 << 11, 84 kDiskArbDiskAppearedNoMountMask = 1 << 12, 85 kDiskArbDiskAppearedNoSizeMask = 1 << 13, 86 kDiskArbDiskAppearedCheckFailed = 1 << 14, 87 kDiskArbDiskAppearedInternal = 1 << 15, 88 kDiskArbDiskAppearedBDROMMask = 1 << 16 89}; 90 91enum 92{ 93 kDiskArbApproveMounting = 0, 94 kDiskArbDisallowMounting = 1 << 0, 95 kDiskArbEjectDevice = 1 << 2, 96 kDiskArbRequireAuthentication = 1 << 3, 97 kDiskArbMountReadOnly = 1 << 4 98}; 99 100enum 101{ 102 kDiskArbUnmountAllFlag = 1 << 0, 103 kDiskArbUnmountAndEjectFlag = 1 << 1, 104 kDiskArbUnmountOneFlag = 1 << 2, 105 kDiskArbForceUnmountFlag = 1 << 3, 106 kDiskArbNetworkUnmountFlag = 1 << 4 107}; 108 109enum 110{ 111 kDiskArbCompletedDiskAppeared = 1 << 0, 112 kDiskArbCompletedPreUnmount = 1 << 1, 113 kDiskArbCompletedPostUnmount = 1 << 2, 114 kDiskArbCompletedPreEject = 1 << 3, 115 kDiskArbCompletedPostEject = 1 << 4 116}; 117 118enum 119{ 120 kDiskArbRenameSuccessful = 1 << 0, 121 kDiskArbRenameRequiresRemount = 1 << 1 122}; 123 124enum 125{ 126 kDiskArbHandlesUnrecognizedFixedMedia = 1 << 0, 127 kDiskArbHandlesUnrecognizedCDMedia = 1 << 1, 128 kDiskArbHandlesUnrecognizedDVDMedia = 1 << 2, 129 kDiskArbHandlesUnrecognizedOtherRemovableMedia = 1 << 3, 130 kDiskArbHandlesUnrecognizedBDMedia = 1 << 4, 131 kDiskArbHandlesUninitializedFixedMedia = 1 << 10, 132 kDiskArbHandlesUninitializedCDMedia = 1 << 11, 133 kDiskArbHandlesUninitializedDVDMedia = 1 << 12, 134 kDiskArbHandlesUninitializedOtherRemovableMedia = 1 << 13, 135 kDiskArbHandlesUninitializedBDMedia = 1 << 14 136}; 137 138enum 139{ 140 kDiskArbHandlesAllUnrecognizedMedia = 0x000000FF, 141 kDiskArbHandlesAllUninitializedMedia = 0x0000FF00, 142 kDiskArbHandlesAllUnrecognizedOrUninitializedMedia = 0x0000FFFF, 143}; 144 145enum 146{ 147 kDiskArbUnmountRequestFailed = 1 << 0, 148 kDiskArbEjectRequestFailed = 1 << 1, 149 kDiskArbUnmountAndEjectRequestFailed = 1 << 2, 150 kDiskArbDiskChangeRequestFailed = 1 << 3 151}; 152 153typedef char DiskArbDeviceTreePath[1024]; 154typedef char DiskArbDiskIdentifier[1024]; 155typedef char DiskArbGenericString[1024]; 156typedef char DiskArbIOContent[1024]; 157typedef char DiskArbMountpoint[1024]; 158 159typedef void ( *DiskArbCallback_CallFailedNotification_t )( char * disk, int type, int status ); 160 161typedef void ( *DiskArbCallback_CallSucceededNotification_t )( char * disk, int type ); 162 163typedef void ( *DiskArbCallback_ClientDisconnectedNotification_t )( void ); 164 165typedef void ( *DiskArbCallback_Device_Reservation_Status_t )( char * disk, int status, int pid ); 166 167typedef int ( *DiskArbCallback_DiskAppeared_t )( char * disk, unsigned flags, char * mountpoint, char * content ); 168 169typedef void ( *DiskArbCallback_DiskAppeared2_t )( char * disk, 170 unsigned flags, 171 char * mountpoint, 172 char * content, 173 char * path, 174 unsigned sequence ); 175 176typedef void ( *DiskArbCallback_DiskAppearedComplete_t )( char * disk, 177 unsigned flags, 178 char * mountpoint, 179 char * content, 180 char * path, 181 unsigned sequence, 182 double time, 183 char * filesystem, 184 char * name ); 185 186typedef int ( *DiskArbCallback_DiskAppearedWithMountpoint_t )( char * disk, unsigned flags, char * mountpoint ); 187 188typedef void ( *DiskArbCallback_DiskApprovalNotification_t )( char * disk, 189 char * name, 190 char * content, 191 char * path, 192 unsigned flags, 193 int writable, 194 int removable, 195 int whole, 196 char * filesystem ); 197 198typedef void ( *DiskArbCallback_DiskChangedNotification_t )( char * disk, char * mountpoint, char * name, int flags, int success ); 199 200typedef void ( *DiskArbCallback_EjectPostNotification_t )( char * disk, int status, pid_t dissenter ); 201 202typedef void ( *DiskArbCallback_EjectPreNotification_t )( char * disk, unsigned reserved0032 ); 203 204typedef void ( *DiskArbCallback_DiskWillBeCheckedNotification_t )( char * disk, int flags, char * content ); 205 206typedef void ( *DiskArbCallback_NotificationComplete_t )( int type ); 207 208typedef void ( *DiskArbCallback_UnknownFileSystemNotification_t )( char * disk, 209 char * reserved0032, 210 char * reserved0064, 211 int writable, 212 int removable, 213 int whole ); 214 215typedef void ( *DiskArbCallback_UnmountPostNotification_t )( char * disk, int status, pid_t dissenter ); 216 217typedef void ( *DiskArbCallback_UnmountPreNotification_t )( char * disk, unsigned reserved0032 ); 218 219typedef void ( *DiskArbCallback_Will_Client_Release_t )( char * disk, int pid ); 220 221typedef void ( *DiskArbCallback_Will_Client_Handle_Unrecognized_Disk_t )( char * disk, 222 int type, 223 char * reserved0064, 224 char * reserved0096, 225 int writable, 226 int removable, 227 int whole ); 228 229extern void DiskArbAddCallbackHandler( int type, void * callback, int overwrite ); 230extern kern_return_t DiskArbClientHandlesUninitializedDisks_auto( int yes ); 231extern kern_return_t DiskArbClientHandlesUnrecognizedDisks( int types, int priority ); 232extern kern_return_t DiskArbClientRelinquishesReservation( char * disk, int pid, int status ); 233extern kern_return_t DiskArbClientWillHandleUnrecognizedDisk( char * disk, int yes ); 234extern kern_return_t DiskArbDiskAppearedWithMountpointPing_auto( char * disk, unsigned reserved0032, char * mountpoint ); 235extern kern_return_t DiskArbDiskApprovedAck_auto( char * disk, int status ); 236extern kern_return_t DiskArbDiskDisappearedPing_auto( char * disk, unsigned reserved0032 ); 237extern kern_return_t DiskArbEjectPreNotifyAck_async_auto( char * disk, int status ); 238extern kern_return_t DiskArbEjectRequest_async_auto( char * disk, unsigned flags ); 239extern int DiskArbGetVolumeEncoding_auto( char * disk ); 240extern boolean_t DiskArbHandleMsg( mach_msg_header_t * message, mach_msg_header_t * reply ); 241extern kern_return_t DiskArbInit( void ); 242extern int DiskArbIsActive( void ); 243extern kern_return_t DiskArbIsDeviceReservedForClient( char * disk ); 244extern kern_return_t DiskArbMsgLoop( void ); 245extern kern_return_t DiskArbMsgLoopWithTimeout( mach_msg_timeout_t timeout ); 246extern void DiskArbNoOp( void ); 247extern kern_return_t DiskArbRefresh_auto( void ); 248extern void DiskArbRegisterCallback_CallFailedNotification( DiskArbCallback_CallFailedNotification_t callback ); 249extern void DiskArbRegisterCallback_CallSucceededNotification( DiskArbCallback_CallSucceededNotification_t callback ); 250extern void DiskArbRegisterCallback_ClientDisconnectedNotification( DiskArbCallback_ClientDisconnectedNotification_t callback ); 251extern void DiskArbRegisterCallback_DiskAppeared( DiskArbCallback_DiskAppeared_t callback ); 252extern void DiskArbRegisterCallback_DiskAppeared2( DiskArbCallback_DiskAppeared2_t callback ); 253extern void DiskArbRegisterCallback_DiskAppearedWithMountpoint( DiskArbCallback_DiskAppearedWithMountpoint_t callback ); 254extern void DiskArbRegisterCallback_DiskChangedNotification( DiskArbCallback_DiskChangedNotification_t callback ); 255extern void DiskArbRegisterCallback_DiskWillBeCheckedNotification( DiskArbCallback_DiskWillBeCheckedNotification_t callback ); 256extern void DiskArbRegisterCallback_EjectPostNotification( DiskArbCallback_EjectPostNotification_t callback ); 257extern void DiskArbRegisterCallback_EjectPreNotification( DiskArbCallback_EjectPreNotification_t callback ); 258extern void DiskArbRegisterCallback_NotificationComplete( DiskArbCallback_NotificationComplete_t callback ); 259extern void DiskArbRegisterCallback_UnknownFileSystemNotification( DiskArbCallback_UnknownFileSystemNotification_t callback ); 260extern void DiskArbRegisterCallback_UnmountPostNotification( DiskArbCallback_UnmountPostNotification_t callback ); 261extern void DiskArbRegisterCallback_UnmountPreNotification( DiskArbCallback_UnmountPreNotification_t callback ); 262extern kern_return_t DiskArbReleaseClientReservationForDevice( char * disk ); 263extern void DiskArbRemoveCallbackHandler( int type, void * callback ); 264extern kern_return_t DiskArbRequestDiskChange_auto( char * disk, char * name, int flags ); 265extern kern_return_t DiskArbRequestMount_auto( char * disk ); 266extern kern_return_t DiskArbRequestMountAndOwn_auto( char * disk ); 267extern kern_return_t DiskArbRetainClientReservationForDevice( char * disk ); 268extern kern_return_t DiskArbSetCurrentUser_auto( int user ); 269extern kern_return_t DiskArbSetVolumeEncoding_auto( char * disk, int encoding ); 270extern kern_return_t DiskArbStart( mach_port_t * port ); 271extern kern_return_t DiskArbUnmountAndEjectRequest_async_auto( char * disk, unsigned flags ); 272extern kern_return_t DiskArbUnmountPreNotifyAck_async_auto( char * disk, int status ); 273extern kern_return_t DiskArbUnmountRequest_async_auto( char * disk, unsigned flags ); 274extern void DiskArbUpdateClientFlags( void ); 275extern kern_return_t DiskArbVSDBAdoptVolume_auto( char * disk ); 276extern kern_return_t DiskArbVSDBDisownVolume_auto( char * disk ); 277extern int DiskArbVSDBGetVolumeStatus_auto( char * disk ); 278 279#endif /* !__LP64__ */ 280#endif /* !__DISKARBITRATIOND__ */ 281 282extern const CFStringRef kDAApprovalRunLoopMode; 283 284extern const CFStringRef kDADiskDescriptionAppearanceTimeKey; 285 286extern const CFStringRef kDADiskDescriptionMediaMatchKey; 287 288#ifndef __DISKARBITRATIOND__ 289 290extern DADiskRef _DADiskCreateFromSerialization( CFAllocatorRef allocator, DASessionRef session, CFDataRef serialization ); 291 292extern DASessionRef _DADiskGetSession( DADiskRef disk ); 293 294extern DAReturn _DADiskSetAdoption( DADiskRef disk, Boolean adoption ); 295 296extern DAReturn _DADiskSetEncoding( DADiskRef disk, UInt32 encoding ); 297 298extern pid_t DADissenterGetProcessID( DADissenterRef dissenter ); 299 300typedef void ( *DAIdleCallback )( void * context ); 301 302extern void DARegisterIdleCallback( DASessionRef session, DAIdleCallback callback, void * context ); 303 304#endif /* !__DISKARBITRATIOND__ */ 305 306#ifdef __cplusplus 307} 308#endif /* __cplusplus */ 309 310#endif /* !__DISKARBITRATION_DISKARBITRATIONPRIVATE__ */ 311