如何枚举设备内的文件

继续填坑

 

这一章我们来研究下,如何得到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是指针,里面装了你指定目录的所有文件,包含了.和..,建议过滤掉

效果如下...

如何枚举设备内的文件_第1张图片

 

不难理解吧,哈哈

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

 

你可能感兴趣的:(iPhone设备管理工具)