近段时间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);
其他的还没有时间去看。改了之后基本正常。
最近过年生计奔波,等有时间再看吧= =。
Comments 4 条评论
博主 jeesuen
你好,最近在做关于C#获取iPhone设备信息的一个项目,真是绞尽脑汁阿,麻烦大神能给个Demo,[email protected],谢过大神!
博主 感谢大神
这方面资料真的很少,谢谢大神了!
博主 jax
大神,能否发一份Demo,初学C# [email protected]
博主 nivalxer
@jax Demo可以参考账号下的其他项目,有一个USB映射工具是基于这个写的。或者可以看提交记录前几个记录,有一个老版本。