在U盘、移动硬盘、USB HUB和各种USB读卡器的主控芯片板上,都存有设备的出品商(vender)、制造商(producter)、版本号(version)和序列号(SN)信息,前两者一般是英文单词记录的商标品牌名称,如TOSHIBA、SANSUNG等,版本号为简单的十进制数字,如0.15、1.2等,而序列号是一长串十进制或十六进制的编码,通常情况下vender+SN就可以唯一标识一个USB设备了。实际上,操作系统还可以读出设备VID和PID,他们都是4位十进制数,VID对应vender,PID对应producter,我们可以通过Windows提供的IOCTL直接读出vender、producter和version,而SN需要其他方式读出,将在另一篇文章中介绍。

本文通过DeviceIoControl获取插入计算机的USB设备的vender、producter和version,具体步骤如下(代码编辑环境为VS2010):

1、通过Window的消息机制捕获插入的USB设备,增添消息函数 ON_WM_DEVICECHANGE();

2、在消息函数中获取设备的盘符:

DEV_BROADCAST_VOLUME* pdev_vol = (DEV_BROADCAST_VOLUME*)dwData;
int vol_char = 0;
int vol_int = pdev_vol->dbcv_unitmask;for (;vol_int;)
{vol_int = vol_int/2;vol_char++;
}
char volNum = vol_char + 'A' - 1;//即为盘符,如G或者H

3、根据所获得盘符,打开对应的设备文件:

char szDrvName[] = "\\\\.\\A:";
szDrvName[4] = volNum;try
{hDevice = CreateFile(szDrvName, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
}
catch (...)
{//创建设备文件失败CloseHandle(hDevice);return;
}

4、通过DeviceIoControl获取具体信息:

PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
STORAGE_PROPERTY_QUERY Query;
DWORD dwOutBytes;
BOOL bResult;pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1];
pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1;Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;try
{bResult = ::DeviceIoControl(hDevice,IOCTL_STORAGE_QUERY_PROPERTY,&Query, sizeof(STORAGE_PROPERTY_QUERY),pDevDesc, pDevDesc->Size,&dwOutBytes,(LPOVERLAPPED)NULL);
}
catch (...)
{//MessageBox(NULL, "获取信息失败", "错误", MB_OK | MB_ICONERROR);return -1;
}   if(bResult)
{char *p;p= (char*)pDevDesc;strcpy(GetUSBInfo->U_PROD,&p[pDevDesc->ProductIdOffset]);//此即为producterstrcpy(GetUSBInfo->U_REV,&p[pDevDesc->ProductRevisionOffset]);//此即为versionstrcpy(GetUSBInfo->U_VEN ,&p[pDevDesc->VendorIdOffset]);//此即为vendor }
else
{//MessageBox(NULL, "获取信息失败", "错误", MB_OK | MB_ICONERROR);return -1;
}

上述代码可以有效获取U盘和移动硬盘等USB存储设备的文本信息,如果想获取VID和PID,可以通过注册表信息或 DDK驱动接口获取。

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

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

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

  2. 批处理获取U盘、可移动硬盘的盘符

    作者:朱金灿 来源:http://blog.csdn.net/clever101 关于批处理获取U盘.可移动硬盘的盘符,网上有三种做法: [方案一]fsutil @echo offfor %%a in ...

  3. C++ 实现判断插入USB的设备是U盘,移动硬盘,光驱

    今天做项目,要求代码能区分出U盘,移动硬盘,光驱等. 有时候我们在做设备监控的时候,要识别一些链接设备,在使用函数GetDriveType的时候,U盘可以返回DRIVE_REMOVABLE,而本地硬盘 ...

  4. 用U盘或移动硬盘装 深山红叶袖珍系统Win PE启动盘

    首先你的移动硬盘或U盘要有USB-HDD引导功能 (注:闪存盘容量不能少于256MB) 1.准备好你的U盘或移动硬盘,用win2000或XP格式化一下,为的是得到NT的boot区. 注:U盘为FAT格 ...

  5. 28. 文件挂载,卸载,mount,语法选项示例,挂载光盘,挂载分区,挂载u盘,挂载移动硬盘,卸载,fuser等使用和示例

    本章详细讲解:文件挂载,卸载,mount,语法选项示例,挂载光盘,挂载分区,挂载u盘,挂载移动硬盘,卸载,fuser的使用和示例 文章目录 mount 语法选项 fstab文件 /etc/fstab文 ...

  6. 向U盘或移动硬盘复制文件出现文件或目录损坏且无法读取解决方法

    向U盘或移动硬盘复制文件出现文件或目录损坏且无法读取 U盘跟其他的机器一样,使用久了难免会出故障,比如常见的弹出一个文件或目录损坏且无法读取的对话框,吓你一跳,整个U盘都损坏的意思其实遇到这种情况一般 ...

  7. Linux系统下如何加载U盘或移动硬盘

    Linux系统下如何加载U盘或移动硬盘 2007-05-15 00:00作者:赵彪出处:论坛整理责任编辑:原野 - 1.在插入U盘或硬盘之前,在命令行窗口运行:fdisk -l 命令,系统将显示目前所 ...

  8. 将DVD刻录盘变成移动硬盘

    现在用户在装机时,都会考虑购置一台DVD刻录机,而目前的DVD刻录机上都提供增值功能(如雕刻.DVD-RAM等),其中DVD-RAM功能被广大用户所看好,因为它可以正常进行刻录,还可以将DVD-RAM ...

  9. 公司禁用U盘和移动硬盘的方法

    公司禁用U盘和移动硬盘公司禁用U盘和移动硬盘的原因多种多样,最响亮的原因就是防止员工带走机密资料,在这里我提供一种不用专业软件的小技巧给大家,因为你的老板永远相信"自己能解决的事,别花钱&q ...

最新文章

  1. “应付”大学作业,我花3小时写了一个“文本转手写”神器
  2. 指纹图谱相似度评价软件_远志与炆远志指纹图谱比较
  3. scala的传名参数
  4. log4j 标准配置模板:
  5. php扑克牌排序,PHP实现判断扑克牌5张连续
  6. Linux获得命令帮助(学习笔记五)
  7. mysql join 条件_MySQL Join 竟然可以这么玩?根据条件 进行复制
  8. 系统引导管理 之 以WinGrub 引导安装Fedora 4.0 为例,详述用WinGrub来引导Linux的安装...
  9. 物联网安全专题 | 浅谈物联网设备安全分析方法 — 硬件篇
  10. GWmodel | 地理加权模型(Ⅱ-2):如何查看地理加权回归的显著性
  11. oracle全量拷贝,oracle数据库expdp异机全量备份
  12. DVD刻录机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 智能循迹避障小车C语言程序编写思路,基于单片机的智能小车避障循迹系统设计...
  14. Labview串口通信中ASCII码和数值相互转换
  15. CAT埋点实战-服务器搭建-代码实现
  16. 大数据学习第一课:虚拟机安装配置
  17. 趣味数学--贷款计算
  18. 物联网技术与应用知识点——期末题库
  19. 什么是混合云战略,混合云战略有什么优势?
  20. Educoder大数据技术与应用作业-郑悦林

热门文章

  1. 微信---风云际会霸天下
  2. 项目中高并发问题的解决方案
  3. mysql查询问题sql语句_询问一个SQL查询语句的有关问题,MYSQL的,来看看吧
  4. 电影功夫熊猫使用的单词分析
  5. 锤子os与鸿蒙os,当贝OS和华为鸿蒙系统哪个好?与当贝OS比有哪些差距
  6. 位运算-python中的“按位取反”
  7. Supermarket Small Talk
  8. 精选汇总 | 硬件DIY
  9. 谁说女子不如儿郎,谁说柔胜不了刚
  10. 监控服务器系统时间的服务,监控服务器系统时间的服务