继续填坑
这一章我们来研究下,如何得到iPhone的文件列表
上文我们提到过,有一个函数,AMDeviceStartSession
这个函数呢,我说过,是开启高级操作的函数。
意思是必须要调用这个函数后,才能执行比较复杂的操作。
比如打开文件,就需要大致以下几个步骤
连接设备-StartSession-开启afc服务(越狱系统开启afc2服务,需要装了afc2插件才能正常打开)-用afc的服务句柄来读取文件-操作文件
前两个前文已经介绍了
那么如何打开afc服务呢?
用到的函数为
AMDeviceSecureStartService
typedef int(*func_AMDeviceSecureStartService)(HANDLE hDevice, HANDLE hCFServiceName, HANDLE hUnknow, HANDLE* pServiceHandle);
第一个参数为设备句柄
第二个是服务名(需要转换为CFString文本,用到函数为:__CFStringMakeConstantString)
第三个给个0或者NULL
第四个就是afc服务的句柄
服务打开了,还需要连接到afc,用到函数
AFCConnectionOpen
typedef int(*func_AFCConnectionOpen)(UINT pServiceSocketHandle, unsigned int io_timeout, HANDLE* pAfcServiceHandle);
第一个参数就是刚刚开afc服务得到的句柄
第二个参数是timeout,看情况设置
第三个参数比较重要,这就是最终要用到的afc指针!
OK!
到现在为止
连接了设备-打开了高级操作-打开了afc服务-连接到afc服务
最终得到一个pAfcServiceHandle
操作文件就要用这个pAfcServiceHandle
首先是枚举设备内的文件...
这时候要用到AFCDirectoryOpen(打开目录)
要读取这个目录,当然得先打开它,对应的,还有AFCDirectoryClose(关闭目录)
把函数贴一下
typedef int(*func_AFCDirectoryOpen)(HANDLE pAfcServiceHandle, const char* pszPath, HANDLE* pDirHandle);
打开目录,三个参数
typedef int(*func_AFCDirectoryRead)(HANDLE pAfcServiceHandle, HANDLE pDirHandle, HANDLE* pBuffer);
读取目录里面的内容
typedef int(*func_AFCDirectoryClose)(HANDLE pAfcServiceHandle, HANDLE pDirHandle);
关闭目录
pbuffer是指针,里面装了你指定目录的所有文件,包含了.和..,建议过滤掉
效果如下...
不难理解吧,哈哈
定制iPhone相关的软件~联系QQ820957570