如何枚举设备内的文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cinnazgc/article/details/52870141

继续填坑

这一章我们来研究下,如何得到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);

打开目录,三个参数

  1. 上文提到的pAfcServiceHandle
  2. 想要打开的路径
  3. 这个目录的handle

typedef int(*func_AFCDirectoryRead)(HANDLE pAfcServiceHandle, HANDLE pDirHandle, HANDLE* pBuffer);

读取目录里面的内容

  1. 上文提到的pAfcServiceHandle
  2. 用AFCDirectoryOpen函数得到的目录handle
  3. pBuffer,这里面装的,就是目录里面的所有文件啦~

typedef int(*func_AFCDirectoryClose)(HANDLE pAfcServiceHandle, HANDLE pDirHandle);

关闭目录

  1. 上文提到的pAfcServiceHandle
  2. 用AFCDirectoryOpen函数得到的目录handle

pbuffer是指针,里面装了你指定目录的所有文件,包含了.和..,建议过滤掉

效果如下...

不难理解吧,哈哈

定制iPhone相关的软件~联系QQ820957570

猜你喜欢

转载自blog.csdn.net/Cinnazgc/article/details/52870141