FBDeviceControl/Management/FBAMDefines.h (131 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import <Foundation/Foundation.h> #pragma mark - AMDevice API /** An Alias AMDeviceRef Type. */ typedef CFTypeRef AMDeviceRef; /** The Connection Reference as is typically passed around between functions. */ typedef CFTypeRef AFCConnectionRef; /** The Connection Reference as is typically passed around between functions. */ typedef CFTypeRef AMDServiceConnectionRef; /** Used inside AFC Operations. */ typedef CFTypeRef AFCOperationRef; /** An Alias for the AMRestorableDeviceRef Type. */ typedef CFTypeRef AMRestorableDeviceRef; /** An Alias for the "Recovery Mode Device" */ typedef CFTypeRef AMRecoveryModeDeviceRef; /** An Alias for a "Secure IO Context" */ typedef void * AMSecureIOContext; /** An Alias for the MISProfileRef Type. */ typedef CFTypeRef MISProfileRef; /** An opaque handle to a notification subscription. */ typedef void *AMDNotificationSubscription; /** An enum for read modes. */ typedef enum : uint64_t { FBAFCReadOnlyMode = 1, FBAFCreateReadAndWrite = 3 } FBAFCReadMode; /** AMDevice Notification Types. */ typedef NS_ENUM(int, AMDeviceNotificationType) { AMDeviceNotificationTypeConnected = 1, AMDeviceNotificationTypeDisconnected = 2, AMDeviceNotificationTypeUnsubscribed = 3, AMDeviceNotificationTypePaired = 4, }; typedef NS_ENUM(int, AMRestorableDeviceNotificationType) { AMRestorableDeviceNotificationTypeConnected = 0, AMRestorableDeviceNotificationTypeDisconnected = 1, }; /** Aliases for AMRestorableDeviceState */ typedef NS_ENUM(int, AMRestorableDeviceState) { AMRestorableDeviceStateDFU = 0, AMRestorableDeviceStateRecovery = 1, AMRestorableDeviceStateRestoreOS = 2, AMRestorableDeviceStateBootedOS = 4, AMRestorableDeviceStateUnknown = 5, }; /** A Notification structure. */ typedef struct { AMDeviceRef _Nonnull amDevice; AMDeviceNotificationType status; } AMDeviceNotification; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wnullability-completeness" /** Defines the "Progress Callback" function signature. */ typedef void (*AMDeviceProgressCallback)(NSDictionary<NSString *, id> *progress, void *_Nullable context); /** Defines the "Notification Callback" AMDeviceRef instances. */ typedef void (*AMDeviceNotificationCallback)(AMDeviceNotification *notification, void *_Nullable context); /** Defines the "Notification Callback" for AMRestorableDeviceRef instances. */ typedef void (*AMRestorableDeviceNotificationCallback)(AMRestorableDeviceRef eventData, AMRestorableDeviceNotificationType status, void *context); /** Defines the "Notification Callback" for AFCConnectionCreate call. */ typedef void (*AFCNotificationCallback)(void *connectionRefPtr, void *arg1, void *afcOperationPtr); /** Defines the callback for "AMSEraseDevice". */ typedef int (*AMSEraseDeviceCallback)(NSString *identifier, int progress, void *_Nullable context); /** A Structure that references to the AMDevice APIs we use. */ typedef struct { // Managing Connections & Sessions. int (*Connect)(AMDeviceRef device); int (*Disconnect)(AMDeviceRef device); int (*IsPaired)(AMDeviceRef device); int (*Pair)(AMDeviceRef device); int (*StartSession)(AMDeviceRef device); int (*StopSession)(AMDeviceRef device); int (*ValidatePairing)(AMDeviceRef device); // Memory Management void (*Retain)(AMDeviceRef device); void (*Release)(AMDeviceRef device); // Getting Properties of a Device. _Nullable CFStringRef (*_Nonnull CopyDeviceIdentifier)(AMDeviceRef device); _Nullable CFStringRef (*_Nonnull CopyValue)(AMDeviceRef device, _Nullable CFStringRef domain, CFStringRef name); // Obtaining Devices. _Nullable CFArrayRef (*CreateDeviceList)(void); int (*NotificationSubscribe)(AMDeviceNotificationCallback callback, int arg0, int arg1, void *context, AMDNotificationSubscription *subscriptionOut); int (*NotificationUnsubscribe)(AMDNotificationSubscription subscription); // Using Connections. int (*ServiceConnectionGetSocket)(CFTypeRef connection); int (*ServiceConnectionInvalidate)(CFTypeRef connection); int32_t (*ServiceConnectionReceive)(CFTypeRef connection, void *buffer, size_t bytes); int (*ServiceConnectionReceiveMessage)(CFTypeRef connection, CFPropertyListRef *messageOut, CFPropertyListFormat *formatOut, void *unknown0, void *unknown1, void *unknown2); int32_t (*ServiceConnectionSend)(CFTypeRef connection, const void *buffer, size_t bytes); int (*ServiceConnectionSendMessage)(CFTypeRef connection, CFPropertyListRef propertyList, CFPropertyListFormat format, void *unknown0, CFDictionaryKeyCallBacks *keyCallbacks, CFDictionaryValueCallBacks *valueCallbacks); AMSecureIOContext (*ServiceConnectionGetSecureIOContext)(CFTypeRef connection); // Managing device recovery. int (*EnterRecovery)(AMDeviceRef device); AMRecoveryModeDeviceRef (*RestorableDeviceGetRecoveryModeDevice)(AMRestorableDeviceRef device); int (*RecoveryModeDeviceSetAutoBoot)(AMRecoveryModeDeviceRef device, int enableAutoBoot); int (*RecoveryDeviceReboot)(AMRecoveryModeDeviceRef device); // Services int (*CreateHouseArrestService)(AMDeviceRef device, CFStringRef bundleID, void *_Nullable unused, AFCConnectionRef *connectionOut); int (*LookupApplications)(AMDeviceRef device, CFDictionaryRef _Nullable options, CFDictionaryRef _Nonnull * _Nonnull attributesOut); int (*SecureInstallApplication)(_Nullable AMDServiceConnectionRef connection, AMDeviceRef device, CFURLRef arg2, CFDictionaryRef arg3, _Nullable AMDeviceProgressCallback callback, void *_Nullable context); int (*SecureInstallApplicationBundle)(AMDeviceRef device, CFURLRef hostAppURL, CFDictionaryRef _Nullable options, _Nullable AMDeviceProgressCallback callback, void *_Nullable context); int (*SecureStartService)(AMDeviceRef device, CFStringRef service_name, _Nullable CFDictionaryRef userinfo, CFTypeRef *serviceOut); int (*SecureTransferPath)(_Nullable AMDServiceConnectionRef connection, AMDeviceRef device, CFURLRef arg2, CFDictionaryRef arg3, _Nullable AMDeviceProgressCallback callback, void *_Nullable context); int (*SecureUninstallApplication)(_Nullable AMDServiceConnectionRef connection, AMDeviceRef device, CFStringRef arg2, int arg3, _Nullable AMDeviceProgressCallback callback, void *_Nullable context); // Developer Images int (*MountImage)(AMDeviceRef device, CFStringRef image, CFDictionaryRef options, _Nullable AMDeviceProgressCallback callback, void *_Nullable context); // Provisioning Profiles CFArrayRef (*CopyProvisioningProfiles)(AMDeviceRef device); CFDictionaryRef (*ProvisioningProfileCopyPayload)(CFTypeRef profile); MISProfileRef (*ProvisioningProfileCreateWithData)(CFDataRef data); int (*InstallProvisioningProfile)(AMDeviceRef device, MISProfileRef profile); int (*RemoveProvisioningProfile)(AMDeviceRef device, CFStringRef profileUUID); CFStringRef (*ProvisioningProfileGetUUID)(MISProfileRef profile); CFStringRef (*ProvisioningProfileCopyErrorStringForCode)(int code); // Restorable Devices: Notifications int (*RestorableDeviceRegisterForNotifications)(AMRestorableDeviceNotificationCallback callback, void *context, int arg2, int arg3); int (*RestorableDeviceUnregisterForNotifications)(int registrationID); // Restorable Devices: Getting and Copying Values. CFStringRef (*RestorableDeviceCopyBoardConfig)(AMRestorableDeviceRef device); CFStringRef (*RestorableDeviceCopyProductString)(AMRestorableDeviceRef device); CFStringRef (*RestorableDeviceCopySerialNumber)(AMRestorableDeviceRef device); CFStringRef (*RestorableDeviceCopyUserFriendlyName)(AMRestorableDeviceRef device); int (*RestorableDeviceGetBoardID)(AMRestorableDeviceRef device); int (*RestorableDeviceGetChipID)(AMRestorableDeviceRef device); int (*RestorableDeviceGetDeviceClass)(AMRestorableDeviceRef device); unsigned long (*RestorableDeviceGetECID)(AMRestorableDeviceRef device); int (*RestorableDeviceGetLocationID)(AMRestorableDeviceRef device); int (*RestorableDeviceGetProductType)(AMRestorableDeviceRef device); int (*RestorableDeviceGetState)(AMRestorableDeviceRef device); // AppleMobileSync int (*AMSInitialize)(int arg0); int (*AMSEraseDevice)(CFStringRef udid, AMSEraseDeviceCallback callback, void *context); // USBMux int (*GetConnectionID)(AMDeviceRef device); int (*USBMuxConnectByPort)(int connectionID, int remotePort, int *socket); // Debugging void (*InitializeMobileDevice)(void); void (*SetLogLevel)(int32_t level); _Nullable CFStringRef (*CopyErrorText)(int status); } AMDCalls; /** A Structure holding references to the 'Apple File Conduit' APIs we use. */ typedef struct { // Creating a Connection AFCConnectionRef (*Create)(void *_Nullable unknown0, int socket, void *_Nullable unknown1, AFCNotificationCallback callback, void *_Nullable unknown3); int (*ConnectionOpen)(CFTypeRef handle, uint32_t io_timeout, CFTypeRef _Nullable *_Nullable conn); int (*ConnectionClose)(AFCConnectionRef connection); int (*ConnectionIsValid)(AFCConnectionRef connection); void (*SetSecureContext)(AFCConnectionRef connection, AMSecureIOContext ioContext); // Individual Operations int (*DirectoryOpen)(AFCConnectionRef connection, const char *path, CFTypeRef _Nullable * _Nullable dir); int (*DirectoryRead)(AFCConnectionRef connection, CFTypeRef dir, char *_Nullable*_Nullable dirent); int (*DirectoryClose)(AFCConnectionRef connection, CFTypeRef dir); int (*DirectoryCreate)(AFCConnectionRef connection, const char *dir); int (*FileRefOpen)(AFCConnectionRef connection, const char *_Nonnull path, FBAFCReadMode mode, CFTypeRef *_Nonnull ref); int (*FileRefClose)(AFCConnectionRef connection, CFTypeRef ref); int (*FileRefSeek)(AFCConnectionRef connection, CFTypeRef ref, int64_t offset, uint64_t mode); int (*FileRefTell)(AFCConnectionRef connection, CFTypeRef ref, uint64_t *_Nonnull offset); int (*FileRefRead)(AFCConnectionRef connection, CFTypeRef ref, void *_Nonnull buf, uint64_t *_Nonnull len); int (*FileRefWrite)(AFCConnectionRef connection, CFTypeRef ref, const void *_Nonnull buf, uint64_t len); int (*RenamePath)(AFCConnectionRef connection, const char *_Nonnull path, const char *_Nonnull toPath); int (*RemovePath)(AFCConnectionRef connection, const char *_Nonnull path); // Batch Operations int (*ConnectionProcessOperation)(AFCConnectionRef connection, CFTypeRef operation); int (*OperationGetResultStatus)(CFTypeRef operation); CFTypeRef (*OperationCreateRemovePathAndContents)(CFTypeRef allocator, CFStringRef path, void *_Nullable unknown_callback_maybe); CFTypeRef (*OperationGetResultObject)(CFTypeRef operation); // Errors char *(*ErrorString)(int errorCode); CFDictionaryRef (*ConnectionCopyLastErrorInfo)(AFCConnectionRef connection); } AFCCalls; #pragma clang diagnostic pop