上一篇简单介绍了ios助手的调查方向,从这一篇开始,则是讲解ios助手的具体开发了。

 

废话不多说,ios助手大部分功能的实现都在iTunesMobileDevice.dll里面。这个助手进行的第一步就是要设备连接,只有连接设备之后才能做其他事情。

其中AMDeviceNotificationSubscribe函数,就是负责设备连接这一块的。

 

函数原型:

int AMDeviceNotificationSubscribe(void (*callback)(ConnectStateInfomation* state),UINT uint1,UINT uint2,UINT uint3,HANDLE *handle);

其中ConnectStateInfomation是一个结构体,该结构体的原型如下:

struct ConnectStateInfomation
{
 HANDLE handle;
 UINT state;
};

 

下面来讲解这个函数的具体情况:

此函数是注册一个回调函数,监听设备的连接状态,并将结构写入ConnectStateInfomation中,其中该结构中的handle是连接设备的句柄,state是连接的设备的状态,state为1的时候表示连接成功,为2的时候表示断开连接;

第1个参数,需要传入一个回调函数的指针,该回调函数的原型是:void (*callback)(ConnectStateInfomation* state);

第2、3、4个参数全部填0;

第5个参数是一个输出参数;也是连接设备的句柄;

 

使用示例:

...

HINSTANCE ____hDLL_iTunesMobileDevice;

WCHAR ____iTunesMobileDevice_path[MAX_PATH];

/*这一段是将dll路径写入环境变量,不然下面的LoadLibrary会加载失败*/

char *libvar;
 char newlibvar[2048];
 libvar = getenv("path");
 sprintf(newlibvar,"path=%s",libvar);
 strcat(newlibvar,";C:\\Program Files (x86)\\Common Files\\Apple\\Mobile Device Support");
 strcat(newlibvar,";C:\\Program Files (x86)\\Common Files\\Apple\\Apple Application Support");
 _putenv(newlibvar);

/*end*/

wcscpy(____iTunesMobileDevice_path,L"C:\\Program Files (x86)\\Common Files\\Apple\\Mobile Device Support\\iTunesMobileDevice.dll");

____hDLL_iTunesMobileDevice = ::LoadLibrary(____iTunesMobileDevice_path);

...

/*在这个函数里面下断点,有设备接入的时候,就会走到这里面来了,ios助手开发的第一步就算完成了*/

void OnCennect(ConnectStateInfomation* state)
{
 HANDLE handle = state->handle;
 int mystate = state->state;
}

...

HANDLE handle;

typedef int (*pFunc)(void (*callback)(ConnectStateInfomation* state),UINT uint1,UINT uint2,UINT uint3,HANDLE *handle);

pFunc AMDeviceNotificationSubscribe= NULL;
AMDeviceNotificationSubscribe=(pFunc)GetProcAddress(____hDLL_iTunesMobileDevice,"AMDeviceNotificationSubscribe");
 if(AMDeviceNotificationSubscribe)
  return AMDeviceNotificationSubscribe(OnCennect,0,0,0,handle);

...

 

其余的就在下一篇文章里面讲吧,如获取设备的基本信息等等

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐