获取U盘 VID,PID
通过注册表获取U盘的VID PID
USB存储类设备插入当前系统时,会在Windows注册表如下目录中进行登记:KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR\Enum,在其Count项中记录当前插入设备的个数。
代码如下:
BOOL getVidPid(GetUSBInfoP GetUSBInfo)
{char lpRegPath[512] = { 0 };char lpRegValue[256] = { 0 };sprintf(lpRegPath, "SYSTEM\\CurrentControlSet\\services\\USBSTOR\\Enum");sprintf(lpRegValue, "Count");//DWORD dwDataSize(0);DWORD dwRegType1(REG_DWORD);DWORD dwRegType2(REG_SZ);LPBYTE lpRegDwordData(NULL);LPBYTE lpRegSzData(NULL);// 查询注册表中映射驱动器的设备信息HKEY hKey;long lRet = 0;try{lRet = ::RegOpenKeyExA(HKEY_LOCAL_MACHINE, // root keylpRegPath, // 要访问的键的位置0, //KEY_READ, // 以查询的方式访问注册表&hKey); // hKEY保存此函数所打开的键的句柄}catch(...){return false;}if(lRet != ERROR_SUCCESS){return false;}else{try{lRet = ::RegQueryValueExA(hKey, // 所打开的键的句柄lpRegValue, // 要查询的键值名NULL,&dwRegType1, // 查询数据的类型lpRegDwordData, // 保存所查询的数据&dwDataSize); // 预设置的数据长度}catch(...){::RegCloseKey(hKey);return false;}if(lRet != ERROR_SUCCESS){::RegCloseKey(hKey);return false;}else{lpRegDwordData = new BYTE[dwDataSize];memset(lpRegDwordData, 0, dwDataSize);try{lRet = ::RegQueryValueExA(hKey,lpRegValue,NULL,&dwRegType1,lpRegDwordData,&dwDataSize);}catch(...){if (lpRegDwordData){delete []lpRegDwordData;lpRegDwordData = NULL;}::RegCloseKey(hKey);return false;}if(lRet != ERROR_SUCCESS){if (lpRegDwordData){delete []lpRegDwordData;lpRegDwordData = NULL;}::RegCloseKey(hKey);return false;}}}DWORD num_HDD = DWORD(*lpRegDwordData);if (num_HDD==0)//没有插入U盘{return false;}char lpRegValue_HDD[16] = { 0 };sprintf(lpRegValue_HDD, "%d", num_HDD-1);if (lpRegDwordData){delete []lpRegDwordData;lpRegDwordData = NULL;}try{lRet = ::RegQueryValueExA(hKey, // 所打开的键的句柄lpRegValue_HDD, // 要查询的键值名NULL,&dwRegType2, // 查询数据的类型lpRegSzData, // 保存所查询的数据&dwDataSize); // 预设置的数据长度}catch(...){::RegCloseKey(hKey);return false;}if(lRet != ERROR_SUCCESS){::RegCloseKey(hKey);return false;}else{lpRegSzData = new BYTE[dwDataSize];memset(lpRegSzData, 0, dwDataSize);try{lRet = ::RegQueryValueExA(hKey,lpRegValue_HDD,NULL,&dwRegType2,lpRegSzData,&dwDataSize);}catch(...){if (lpRegSzData){delete []lpRegSzData;lpRegSzData = NULL;}::RegCloseKey(hKey);return false;}if(lRet != ERROR_SUCCESS){if (lpRegSzData){delete []lpRegSzData;lpRegSzData = NULL;}::RegCloseKey(hKey);return false;}}::RegCloseKey(hKey);//获取VID_PID//strncpy(GetUSBInfo->U_VID_PID, lpRegSzData+4, 17);memmove(GetUSBInfo->U_VID_PID, lpRegSzData+4, 17);GetUSBInfo->U_VID_PID[17] = '\0';//获取序列号/*char SN_temp[32]= {0};memmove(SN_temp, lpRegSzData+22, 32); delete []lpRegSzData;char *needle="&";char* buf = strstr( SN_temp, needle);if (buf != NULL){//char *SN_1 = (char *)malloc(buf-SN_temp);char *temp = SN_temp;//buf[0]='\0';//printf( "%s\n ", haystack);temp = buf + strlen(needle);/* Get next token: *//*buf = strstr( temp, needle);if (buf != NULL){int SN_strlen = buf - SN_temp;memmove(GetUSBInfo->U_SN, SN_temp, SN_strlen);GetUSBInfo->U_SN[SN_strlen] = '\0';}else{memmove(GetUSBInfo->U_SN, SN_temp, 32);}}else{memmove(GetUSBInfo->U_SN, SN_temp, 32);}*/
}int _tmain(int argc, _TCHAR* argv[])
{BOOL flag = FALSE;GetUSBInfoP GetUSBInfo = NULL;GetUSBInfo = new struct GetUSBInfoStru;memset(GetUSBInfo, 0, sizeof(struct GetUSBInfoStru));flag = getVidPid(GetUSBInfo);if(flag){cout<<"vid_pid = "<<GetUSBInfo->U_VID_PID<<endl;}//GetUsbDevID();system("pause");return 0;
}
获取U盘 VID,PID相关推荐
- 通过Windows注册表获取U盘、移动硬盘和USB读卡器等设备的PID、VID和序列号
通过Windows注册表获取U盘.移动硬盘和USB读卡器等设备的PID.VID和序列号 http://blog.csdn.net/trustbo/article/details/50057463 LP ...
- Ubuntu下如何获取usb相机的PID/VID并打开指定的相机
项目需求控制和打开两个USB摄像头,并且根据相机的PID和VID来打开指定的相机,来区分主副相机,在Windows下可以通过AForge.Video.DirectShow库来实现,但是Ubuntu下没 ...
- Linux查看U盘的Vid,CheckUDisk(查看USB的VID/PID/厂商信息)v5.4
CheckUDisk是一个免费的USB存储设备检测工具,能查看诸如USB存储设备名称.盘符.VID&PID.序列号.制造商信息.产品信息.版本.传输速度等连接到PC上的U盘信息.支持Win98 ...
- 通过DeviceIoControl获取U盘或移动硬盘的出品商、制造商和版本号等信息
在U盘.移动硬盘.USB HUB和各种USB读卡器的主控芯片板上,都存有设备的出品商(vender).制造商(producter).版本号(version)和序列号(SN)信息,前两者一般是英文单词记 ...
- MFC使用Windows API实现U盘插拔检测,获取U盘容量,U盘内容移动删除,开启和关闭U盘以及获取盘符
文章目录 前言 一.利用OS API实现对U盘的管理 二.项目到底长啥样 三.实例代码 1.实时判断U盘插入与拔出 2.能够显示U盘的总容量.使用容量和剩余容量 3.能够将某个目录上的文件或整个目录复 ...
- 获取U盘序列号的代码
2019独角兽企业重金招聘Python工程师标准>>> 获取U盘序列号的代码 日期:2007年10月29日 作者:laihongbo 人气:4679 查看:[大字体 中字体 小字体] ...
- 批处理bat命令--获取当前盘符和当前目录和上级目录
1. 批处理命令获取当前盘符和当前目录 @echo off rem 设置环境变量延迟 setlocal EnableDelayedExpansion echo 当前正在运行的批处理文件所在路径:!cd ...
- c# 获取路径的盘符_c#获取驱动器盘符
在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数 ...
- c盘java文件误删_java获取C盘下的隐藏目录文件名称
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 网易云课堂 在Java中, File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作. Fil ...
- java获取C盘下的隐藏目录文件名称
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 网易云课堂 Flutter开发中的点滴积累 在Java中, File类用来将文件或者文件夹封装成对象,方便 ...
最新文章
- 同向逆向、多车道线检测
- 如何向非技术人员解释“稀疏傅里叶变换”算法?
- 【两行命令】R语言读取excel数据
- oracle 大字段clob检索
- OpenCV方向梯度直方图HOG的实例(附完整代码)
- qhfl-4 注册-登录-认证
- python标准类型内建函数_Python 标准库系列之内建函数
- python编辑器_推荐一款Python编辑器,集Pycharm和Sublime优点于一身的王者
- 记录是一段旅程:记录Scribus可获得3课
- Catkin工作空间 (重点)
- python浙江大学城市学院_GitHub - teribsandy/zjcs-tf-code: 浙江大学城市学院的tensorflow项目教学代码(部分)...
- 2016年第七届(C/C++)B组蓝桥国赛题
- 怎样使按钮响应回车键
- ECTouch_v2.7.2-一款强大的商城系统源码附视频教程
- netbean的安装及jdk安装和环境变量设置
- 最小Linux系统中如何实现开机自动运行程序(进程)
- 银行理财产品的十个坑
- 如何在vue中设置全局方法
- php 读取解析excel文件内容,怎么用PHP读取Excel文件信息及内容?(图文+视频教程)...
- “两岸四地消费者信心指数”:消费者信心波动
热门文章
- mysql blast2go_blast2go本地化 mysql_study
- 计算机处理器性能排名,电脑处理器性能排行榜
- 解决IE上登陆oracle OEM时报:“证书错误,导航已阻止”的错误
- 机器人周志_智能机器人杂志
- 后盾网php项目开发实例,后盾网thinkphp许愿墙html源码
- windows连接局域网打印机出现0x0000007c错误处理方法
- 将QQ拼音词库导入到搜狗拼音中
- 利用MATLAB进行车辆的速度测量
- 库文件 c语言 编译器,抽取VS文件组成类GCC的编译器,并编译C程序为dll动态链接库...
- 外观检验人员一致性(Kappa)分析