iTunesMobileDevice C#库兼容64位驱动方法

发布于 2015-02-08  5329 次阅读


近段时间iTunes升级了Windows下的iTunesMobileDevice驱动,将以前的32位驱动升级到了64位。所以导致很大一部分通过DLL注入方式来实现与iOS设备通讯的助手类应用纷纷抛出错误,无法正常使用。当然同时也包括之前发布到GitHub的库:iTunesMobileDevice 也无法使用。

主要原因是:32位升级到了64位,之前如果写为了固定长度的参数,非托管类的参数,需要重新升级参数长度到64位才能够兼容。

近期刚好有空,就改了一下,已经可以兼容64位。

主要改动如下:

CFRange 类因为声明类型为[StructLayout(LayoutKind.Sequential)] 所以需要升级改类下面参数为long型:

internal long Location;
internal long Length;

改动这个之后,获取设备信息(AMDeviceCopyValue)、读取Plist等功能基本就正常了。

 

CFStringGetCharacters、CFArrayGetValues、GetKeysAndValues函数,第三个参数Buffer需要在声明分配内存的时候,同时扩大一倍Buffer= Marshal.AllocCoTaskMem(len*2);

同理参考其他类的需要先声明分配内存传入的参数,如果有长度需要同时扩大1倍即可。

 

另外AFC协议OPEN方法打开文件,新API减少了一个参数:

public static extern int AFCFileRefOpen(IntPtr afcHandle, IntPtr path, int mode, int unknown, ref long handle);

第四个unknown参数已经去除,删除该参数即可正常:

public static extern int AFCFileRefOpen(IntPtr afcHandle, IntPtr path, int mode, ref long handle);

 

其他的还没有时间去看。改了之后基本正常。

最近过年生计奔波,等有时间再看吧= =。

届ける言葉を今は育ててる
最后更新于 2015-02-08