额~很久没更新了,主要是这段时间太忙了,没来更新...这几天会多写几章..
这一章要讲的是操作文件需要开启的AFC和AFC2服务.
首先介绍一下这里的服务的概念:
需要设备完成某一个特定功能,首先需要使用相关API通知设备开启对应的服务,然后才能使用其他API来完成特定功能.
设备上有很多功能都需要开启服务,如:
操作文件 - AFC和AFC2服务
音乐和播放列表管理(增删改) - ATC服务
图片和相册管理(增删改) - ATC服务
联系人管理 - Mobilesync服务
应用程序管理(安装卸载等) - Springboard服务和Installation_proxy服务还有HouseArrest服务
当然还有一些其他的服务,这里就不多说了
其中有些服务是需要一直开启的,有些服务则在使用完之后需要马上关闭
今天讲的的是文件操作所需要的AFC服务和AFC2服务.
直接上代码:
开启AFC服务:
BOOL IOSAFCService::Open(){ if (iTunesApi::AMDeviceSecureStartService(m_hDevice, iTunesApi::CFStringMakeConstantString("com.apple.afc"), NULL, &serviceHandle) != 0) return FALSE; socketHandle = iTunesApi::AMDServiceConnectionGetSocket(serviceHandle); if(iTunesApi::AMDServiceConnectionGetSecureIOContext(serviceHandle)!=0) return FALSE; if (iTunesApi::AFCConnectionOpen((UINT)socketHandle, 0, &afcHandle) != 0) return FALSE; return TRUE; }
解释:
m_hDevice是之前的设备句柄,不清楚的请开前面几章的内容;
serviceHandle,socketHandle和afcHandle都是HANDLE类型;
其中afcHandle则是最终我们需要的AFC服务的句柄
需要用到的API函数有:
AMDeviceSecureStartService
AMDServiceConnectionGetSocket
AMDServiceConnectionGetSecureIOContext
AFCConnectionOpen
CFStringMakeConstantString 构造设备所需要的字符串类型,在CoreFundation.dll里面
至于函数原型,直接看上面的代码就能看出来,就不多说了。
至于AFC2服务只需要改一个地方:
iTunesApi::CFStringMakeConstantString("com.apple.afc") 改成iTunesApi::CFStringMakeConstantString("com.apple.afc2")即可
这两个服务有什么区别呢?
其中AFC服务是标准的文件系统,AFC2可以算是越狱文件系统了,AFC2服务更高级,
AFC服务所提供的根目录实际上是AFC2服务/var/mobile/Media目录
当然实际上我们一般只用得上AFC服务就足够了