识别Android手机并检测驱动

这是一篇流水账,只是讲下识别Android手机的思路。也许不是最好的办法,但是是可行的。

 

枚举USB控制器,得到每个USB设备的信息,主要是获取Vendor、Product和SerialNumber

其实也就是实现USBView的功能,可以参考USBView的源码 http://download.csdn.net/detail/nightrainljh/3717068

这个资源的程序可能跑不起来,不过没关系,只要看看源码就好了

下图中的软件是用的RW-Everything,可以查看本机硬件信息,很方便
  
识别Android手机并检测驱动_第1张图片
 
遍历手机的描述符,找出ADB接口设备,那么如何确定接口是ADB呢?我这里的办法是检查分类代码,如果是0xFF 0x42 0x01,而且设备有序列号的话

则认为是Android设备(我目前采用的判断办法,暂时没识别错误的问题)

这个我之前就转过一篇分类代码含义文章,可以参考一下 http://blog.csdn.net/aqtata/article/details/8285253


识别Android手机并检测驱动_第2张图片 

整理一下思路,获取USB设备,得到VID和PID,有些VID没有做过Android手机,可以过滤一道
然后找出ADB的接口描述(分类代码为0xFF 0x42 0x01 且有序列号),基本判定就是Android设备了!

 

当然,要100%精确确定是不是Android设备,最好的办法是通过VID和PID去检测。但由于PID是各个制造商自行定义的
所以我们是不可能有这个PID数据的,只能通过上面的笨办法去检测!

 

接着,就是检查ADB驱动是否安装。
通过ADB驱动文件中得知,ADB设备接口GUID是{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}
我们只需要通过SetupDiXXX系列API来枚举设备,检查是否有ADB设备即可

 

如果在USB设备中筛选出了手机设备,但是却没有找到ADB设备,那么基本可以确定本机没有安装ADB驱动

然后就是从"未知设备"中找到ADB设备即可。怎么匹配呢?找它的"父系"!

 

识别Android手机并检测驱动_第3张图片

 

可以看到,"父系"和VID、PID、SerialNumber和之前找到的USB设备信息相匹配!那么就确定了它是ADB设备!剩下的就是安装合适的驱动程序了……

 

你可能感兴趣的:(android,Windows编程)