ios助手开发系列(五):文件操作系列2 - 操作文件和文件夹所需要开启的服务:AFC服务和AFC2服务

额~很久没更新了,主要是这段时间太忙了,没来更新...这几天会多写几章..大笑

 

这一章要讲的是操作文件需要开启的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服务就足够了

你可能感兴趣的:(ios助手开发系列(五):文件操作系列2 - 操作文件和文件夹所需要开启的服务:AFC服务和AFC2服务)