linux 设备型号,根据USB设备硬件信息获取Android设备型号
前些日子,自己接手专门为Android设备开发的数据恢复软件,第一次作为项目经理带队进行项目开发。
其中为了解决设备和型号的对应关系,用于区分当前接入系统的设备是USB设备,并且是Android设备而不是通常的USB设备或者其他的手机设备。
故需要获得设备的硬件设备序号,根据硬件信息特征码来和Android特征码数据库进行匹配,来取得设备的型号。
首先根据硬件的GUID获取USB类设备集句柄
//USB设备的GUID
static const GUID GUID_DEVINTERFACE_USB_DEVICE =
{ 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };
//磁盘的GUID
const GUID* szDiskClassGuid = &GUID_DEVINTERFACE_DISK; //磁盘类
const GUID* volumeGuid_ = &GUID_DEVINTERFACE_VOLUME; //卷类
//获取USB类设备集句柄
int CusbDeviceInfo::EnumUsbDeviceSet()
{
// Get device interface info set handle for all devices attached to system
hDevInfo = NULL;
hDevInfo = SetupDiGetClassDevs(
szDiskClassGuid, /* CONST GUID * ClassGuid - USB class GUID */
NULL, /* PCTSTR Enumerator */
NULL, /* HWND hwndParent */
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE/* DWORD Flags */);
if(hDevInfo == INVALID_HANDLE_VALUE)
{
DWORD err = GetLastError();
qDebug()<
return -1;
}
//获取可移动分区
bool Rv = GetAllRemovablePartitions();
//if (Rv)
//{
int ret = EnumUsbDeviceInfo();
return ret;
//}
//else
//{
// return -1;
//}
}
//获取枚举的设备信息
SP_DEVINFO_DATA devInfoData = {sizeof(SP_DEVINFO_DATA)};
bRet = SetupDiEnumDeviceInfo(hDevInfo,dwIndex,&devInfoData);
if(!bRet)
{
DWORD err = GetLastError();
SetupDiDestroyDeviceInfoList(hDevInfo);
break;
}
DWORD nSize=0 ;
TCHAR DevInstanceId[MAX_PATH];
if(SetupDiGetDeviceInstanceId(hDevInfo, &devInfoData, DevInstanceId, sizeof(DevInstanceId), &nSize))
{
QString DeviceId = QString::fromWCharArray(DevInstanceId);
//m_DeviceIdVector.append(DeviceId);
if (DeviceId.left(3).toUpper() == "USB")
{
qDebug()<
}
}
else
{
DWORD err = GetLastError();
continue;
}
//
//获取设备接口数据集
SP_DEVICE_INTERFACE_DATA devInterfaceData;
BYTE buffer[BUFFER_SIZE];
DWORD RequiredSize;
TCHAR buf[BUFFER_SIZE];
DEVINST devInstParent;
ZeroMemory(&devInterfaceData, sizeof(devInterfaceData));
devInterfaceData.cbSize = sizeof(devInterfaceData);
if(!SetupDiEnumDeviceInterfaces(hDevInfo,NULL,szDiskClassGuid,dwIndex,&devInterfaceData))
{
qDebug()<
DWORD err = GetLastError();
continue;
}
//获取设备接口细节信息
ZeroMemory(&devInfoData, sizeof(devInfoData));
devInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
PSP_DEVICE_INTERFACE_DETAIL_DATA pDevDetail;
pDevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)buffer;
pDevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
bool ret = SetupDiGetDeviceInterfaceDetail(hDevInfo, &devInterfaceData,
pDevDetail, BUFFER_SIZE, &RequiredSize, &devInfoData);
if(!ret)
{
qDebug()<
DWORD err = GetLastError();
continue;
}
//获取设备状态
CM_Get_Device_ID(devInfoData.DevInst, buf, sizeof(buf),0);
QString str = QString::fromStdWString(buf);
if (str.left(3).toUpper() == "USB")
{
qDebug()<
m_DeviceVectorID_1.append(QString::fromStdWString(buf));
}
CM_Get_Parent(&devInstParent,devInfoData.DevInst, 0);
CM_Get_Device_ID(devInstParent, buf, sizeof(buf),0);
str = QString::fromStdWString(buf);
//根据以下方法取得设备SDN id
HANDLE hDrive = CreateFile(pDevDetail->DevicePath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
同时可根据系统中移动分区各个盘符取得对应的磁盘以及磁盘SDN id.
根据设备获取的和通过系统中获取的移动设备进行SDN匹配就能获取设备和系统中盘符的对应关系。
同时可以根据上面获取到的设备状态和设备接口细节信息去Android SQL数据中通过正则表达式进行序列号匹配获取是否是Android设备。
以及android设备的型号。 由于安卓设备型号复杂,种类繁多,所以目前只能通过数据库匹配的方式来进行是否是Android设备的判断。
如果新出的设备,需要随时更新数据库。 不知哪位大牛有更好的方法。
linux 设备型号,根据USB设备硬件信息获取Android设备型号相关推荐
- android查看摄像头信息,获取Android设备上的详细的摄像头信息
本文引用地址:http://www.eepw.com.cn/article/201610/305681.htm package=wjh.android.takepicture android:vers ...
- linux 查看usb驱动,linux查看硬件信息及驱动设备相关整理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...
- linux查看usb驱动版本号,linux查看硬件信息及驱动设备相关整理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...
- linux如何查看硬件驱动,linux查看硬件信息及驱动设备相关整理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...
- linux检测硬件驱动,linux查看硬件信息及驱动设备相关整理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...
- linux查看设备硬件,linux查看硬件信息及驱动设备相关整理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...
- linux查看硬盘驱动,linux查看硬件信息及驱动设备相关整理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...
- Android+usb+spi,Android设备如何使用USB的硬件接口
你知道Android设备如何使用USB的硬件接口吗?下面将由学习啦小编带大家来解答这个疑问吧,希望对大家有所收获! 如何处理硬件接口问题 最近业界的发展显示,智能手机/便携系统与自动化系统或机械系统之 ...
- LINUX检测服务并自动运行,一种Linux下的开机自动检测硬件信息的方法与流程
技术领域本发明涉及服务器开机检测技术,具体的说是一种Linux下的开机自动检测硬件信息的方法. 背景技术: 服务器产品研发初期,产品多为工程样本,问题很多,这些问题中硬件问题占较大部分.在工程验证测试 ...
最新文章
- 华为 日志服务器 配置文件,配置日志服务器
- Oracle SID爆破工具SidGuess
- Windows下通过VNC远程访问Linux服务器,并实现可视化
- c++采集声卡输出_舒尔 Shure RMCE-LTG Lightning-MMCX接口耳机线[线型声卡]测评报告 [Soomal]...
- redis:list的底层实现--压缩列表
- 2013年06月电脑公司GHOSTXPSP3装机版◆年中推荐◆
- webpack打包后引用cdn的js_JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解...
- java登录界面命令_Java命令行界面(第3部分):jbock
- 怎么更换锁定计算机的图片,Win10系统下怎样对锁定界面的背景图片进行更换
- ajaxsetup获取ajax的url_跨域调用接口的方法之一:$.ajaxSetup()
- springboot之websocket集成
- leetcode刷题日记-846. 一手顺子
- Android uses-permission 权限大全
- 精睿 ESS EAV 【中文商业特别版+纯净版-官方升级】【2.11更新3.0.685.0】
- ExecuteNonQuery()返回-1的问题及解决
- 京瓷1025打印机打印有底灰简单处理
- 和风天气API调用结果乱码
- 9.----------------------------------------------------------------------------------------【学成在线案例】
- 关于极光vip与非vip的稳定性、送达率比较
- UILabel行间距调整
热门文章
- 微信小程序halfScreenDialog的实现
- 指令mysql5.6卸载_Mysql5.6压缩包安装到windows 卸载命令
- 员工上网行为管理——一把怎样的双刃剑
- ENVI高分一号卫星预处理:以GF-1/WFV多光谱数据为例(含定标系数)
- 这一次,彻底搞懂useEffect
- python——输入出生和月,计算出接下来的生日距离今天还有多少天
- U盘或移动固态硬盘加密等功能
- 3DMAX 导出ogre模型,骨骼(.mesh/.skeleton)
- 持证支付机构重庆公众通投资控股的国通石油遭遇危机
- 全兼容增强版zc706单板照片