通过注册表获取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相关推荐

  1. 通过Windows注册表获取U盘、移动硬盘和USB读卡器等设备的PID、VID和序列号

    通过Windows注册表获取U盘.移动硬盘和USB读卡器等设备的PID.VID和序列号 http://blog.csdn.net/trustbo/article/details/50057463 LP ...

  2. Ubuntu下如何获取usb相机的PID/VID并打开指定的相机

    项目需求控制和打开两个USB摄像头,并且根据相机的PID和VID来打开指定的相机,来区分主副相机,在Windows下可以通过AForge.Video.DirectShow库来实现,但是Ubuntu下没 ...

  3. Linux查看U盘的Vid,CheckUDisk(查看USB的VID/PID/厂商信息)v5.4

    CheckUDisk是一个免费的USB存储设备检测工具,能查看诸如USB存储设备名称.盘符.VID&PID.序列号.制造商信息.产品信息.版本.传输速度等连接到PC上的U盘信息.支持Win98 ...

  4. 通过DeviceIoControl获取U盘或移动硬盘的出品商、制造商和版本号等信息

    在U盘.移动硬盘.USB HUB和各种USB读卡器的主控芯片板上,都存有设备的出品商(vender).制造商(producter).版本号(version)和序列号(SN)信息,前两者一般是英文单词记 ...

  5. MFC使用Windows API实现U盘插拔检测,获取U盘容量,U盘内容移动删除,开启和关闭U盘以及获取盘符

    文章目录 前言 一.利用OS API实现对U盘的管理 二.项目到底长啥样 三.实例代码 1.实时判断U盘插入与拔出 2.能够显示U盘的总容量.使用容量和剩余容量 3.能够将某个目录上的文件或整个目录复 ...

  6. 获取U盘序列号的代码

    2019独角兽企业重金招聘Python工程师标准>>> 获取U盘序列号的代码 日期:2007年10月29日 作者:laihongbo 人气:4679 查看:[大字体 中字体 小字体] ...

  7. 批处理bat命令--获取当前盘符和当前目录和上级目录

    1. 批处理命令获取当前盘符和当前目录 @echo off rem 设置环境变量延迟 setlocal EnableDelayedExpansion echo 当前正在运行的批处理文件所在路径:!cd ...

  8. c# 获取路径的盘符_c#获取驱动器盘符

    在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数 ...

  9. c盘java文件误删_java获取C盘下的隐藏目录文件名称

    题记 --  执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 网易云课堂 在Java中, File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作. Fil ...

  10. java获取C盘下的隐藏目录文件名称

    题记   --  执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天.    网易云课堂 Flutter开发中的点滴积累 在Java中, File类用来将文件或者文件夹封装成对象,方便 ...

最新文章

  1. 同向逆向、多车道线检测
  2. 如何向非技术人员解释“稀疏傅里叶变换”算法?
  3. 【两行命令】R语言读取excel数据
  4. oracle 大字段clob检索
  5. OpenCV方向梯度直方图HOG的实例(附完整代码)
  6. qhfl-4 注册-登录-认证
  7. python标准类型内建函数_Python 标准库系列之内建函数
  8. python编辑器_推荐一款Python编辑器,集Pycharm和Sublime优点于一身的王者
  9. 记录是一段旅程:记录Scribus可获得3课
  10. Catkin工作空间 (重点)
  11. python浙江大学城市学院_GitHub - teribsandy/zjcs-tf-code: 浙江大学城市学院的tensorflow项目教学代码(部分)...
  12. 2016年第七届(C/C++)B组蓝桥国赛题
  13. 怎样使按钮响应回车键
  14. ECTouch_v2.7.2-一款强大的商城系统源码附视频教程
  15. netbean的安装及jdk安装和环境变量设置
  16. 最小Linux系统中如何实现开机自动运行程序(进程)
  17. 银行理财产品的十个坑
  18. 如何在vue中设置全局方法
  19. php 读取解析excel文件内容,怎么用PHP读取Excel文件信息及内容?(图文+视频教程)...
  20. “两岸四地消费者信心指数”:消费者信心波动

热门文章

  1. mysql blast2go_blast2go本地化 mysql_study
  2. 计算机处理器性能排名,电脑处理器性能排行榜
  3. 解决IE上登陆oracle OEM时报:“证书错误,导航已阻止”的错误
  4. 机器人周志_智能机器人杂志
  5. 后盾网php项目开发实例,后盾网thinkphp许愿墙html源码
  6. windows连接局域网打印机出现0x0000007c错误处理方法
  7. 将QQ拼音词库导入到搜狗拼音中
  8. 利用MATLAB进行车辆的速度测量
  9. 库文件 c语言 编译器,抽取VS文件组成类GCC的编译器,并编译C程序为dll动态链接库...
  10. 外观检验人员一致性(Kappa)分析