怎么得到USB设备对应的盘符

zw157877672 2009-10-22 03:49:50
已知USB设备的vid,pid,以及设备路径,怎么得到USB的盘符。
假设有多个U盘,如何判断哪个盘符是USB的盘符。最好有源代码,谢谢。
...全文
1017 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqyixin1 2012-11-02
  • 打赏
  • 举报
回复
现在写个结贴,首先基本问题解决,我谈论下我所涉及的业务,首先,将所有的USB存储设备搜索到,用到删除句柄所涉及的API,的到的唯一标示符从注册表中取。 业务二, 需要屏蔽特定的端口, 方法用的是SPDRP_LOCATION_PATHS。但不确定其他机器会有不同路径,望高手求教。最后,乱插乱拔消息通过流程控制,但现在加了屏蔽端口的功能, 在屏蔽端口上也会有出现非安全插拔消息, 有高手也求解决。 好的,谢谢论坛帮助过我的人。

谢谢,Tr0j4n,但你的方法对于一般设备非常有效,有趣无驱问题,你的方法失败额。不过还是谢谢你啊。
ChrisNada 2010-05-14
  • 打赏
  • 举报
回复
为什么看不到2楼 的答案?
MoXiaoRab 2009-10-22
  • 打赏
  • 举报
回复
1、枚举系统盘符,找出所有的U盘盘符

2、CreateFile打开它,返回一个句柄,CreateFile打开这样的盘符字符串"\\\\?\\H:"


HANDLE hDeviceHandle = CreateFile(PATH,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);


3、通过DeviceIoControl,利用IOCTL_STORAGE_QUERY_PROPERTY这个控制码,能获得属性值

/* 取设备属性信息
//(in) hDevice -- 设备句柄
//(out) pDevDesc -- 输出的设备描述和属性信息缓冲区指针(包含连接在一起的两部分)
*/
BOOL GetDriveProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
{
STORAGE_PROPERTY_QUERY Query; // 查询输入参数
DWORD dwOutBytes; // IOCTL输出数据长度
BOOL bResult; // IOCTL返回值

// 指定查询方式
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;

// 用IOCTL_STORAGE_QUERY_PROPERTY取设备属性信息
bResult = ::DeviceIoControl(hDevice, // 设备句柄
IOCTL_STORAGE_QUERY_PROPERTY, // 取设备属性信息
&Query, sizeof(STORAGE_PROPERTY_QUERY), // 输入数据缓冲区
pDevDesc, pDevDesc->Size, // 输出数据缓冲区
&dwOutBytes, // 输出数据长度
(LPOVERLAPPED)NULL); // 用同步I/O

return bResult;
}


结构声明如下:

typedef struct _STORAGE_DEVICE_DESCRIPTOR {
ULONG Version; // 版本
ULONG Size; // 结构大小
UCHAR DeviceType; // 设备类型
UCHAR DeviceTypeModifier; // SCSI-2额外的设备类型
BOOLEAN RemovableMedia; // 是否可移动
BOOLEAN CommandQueueing; // 是否支持命令队列
ULONG VendorIdOffset; // 厂家设定值的偏移
ULONG ProductIdOffset; // 产品ID的偏移
ULONG ProductRevisionOffset; // 产品版本的偏移
ULONG SerialNumberOffset; // 序列号的偏移
STORAGE_BUS_TYPE BusType; // 总线类型
ULONG RawPropertiesLength; // 额外的属性数据长度
UCHAR RawDeviceProperties[1]; // 额外的属性数据(仅定义了象征性的1个字节)
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;



调用以上列出的GetDriveProperty时要注意声明一个STORAGE_DEVICE_DESCRIPTOR变量,并且初始化,可以这样初始化:
PSTORAGE_DEVICE_DESCRIPTOR DeviceDesc;
DeviceDesc=(PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1];
DeviceDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1;


这样就可以了找出对应你的PID和VID的U盘的盘符了
vivvan 2009-10-22
  • 打赏
  • 举报
回复
先枚举你的U盘,查看其PID,VID,判断与已知设备是否相同。。

我这刚好有个源代码。。去下吧;http://download.csdn.net/source/1761368

要装DDK..
ankye 2009-10-22
  • 打赏
  • 举报
回复
读注册表
  ChipGenius是一款USB设备芯片型号检测工具,可以自动查询U盘、MP3/MP4、读卡器、移动硬盘等一切USB设备的主控芯片型号、制造商、品牌、并提供相关资料下载地址。当然也可以查询USB设备的VID/PID信息、设备名称、接口速度、序列号、设备版本等。   软件绿色小巧,即插即用,是数码消费者、电子爱好者、DIY人士和数码维修人员身边的好帮手。    -------------------------------------- 应用举例: 1、快速修复U盘:不用拆机即可查询U盘的芯片型号,快速找到对应的量产工具 2、帮你识别假冒U盘:还怕买到假冒U盘吗?随时带上我吧(配合MyDiskTest更佳) 3、专业选购MP3:MP3主控方案一般厂家都不说,而芯片又是选购MP3的重要指标 4、识别假IPOD:我一直怀疑自已的IPOD是假的,又无法拆开,这个任务交给我搞定 5、维修好帮手:数码维修人员整天和数码产品打交道,我的出现就是你的得力助手 6、其它USB存储:买读卡器、移动硬盘、USB-Hub....,从专业角度帮你挑选对比 7、其它USB外设:摄像头、USB鼠标、打印机、USB声卡....,免拆壳哦 8、主板芯片组:看芯片型号、找驱动、查主板性能,有我更轻松 9、后续还有更多神秘功能,等你来发掘...... -------------------------------------- 版本更新: V3.00 1、新增在线升级功能,检测设备的准确性大幅提升 2、修订繁体语言的描述,更加符合语法习惯 V2.72 1.修正英文界面版本号显示为2.64的小bug 2.增加繁体中文语言界面 V2.70 1.改进了检测算法,结果更加准确,增强了实用性 2.修正了一些极小的细节问题 3.新增大量国外存储设备识别信息 V2.64 1.修正未分区的移动硬盘出现盘符 *: 问题 2.人性化的自动选定第一个USB存储设备,若没有,自动选择第一个USB外设,若还没有,则选定第一个USB主板控制器 V2.60 1、优化了启动加载数据库的过程,在启动过程中插拔设备不会造成程序锁死 2、改善了对非中文或英文操作系统的支持,可以在没有中文字库的机器上运行 V2.50 1、增加英文语言界面,并可根据操作系统自动识别 2、修正Windows系统下大字体界面变形的问题 3、改正了某些库里没有产品厂家和名称显示为空白的问题。 V2.38 1、优化了内存占用 2、修正界面显示一小Bug 3、新增一些非存储USB设备识别 v2.30 1、更正了在Win2000系统下对带有虚拟光盘(USB-CDROM)的U盘支持不好的问题 2、对于同一设备带有多个序列号的情况(每个盘符对应设备序列号不同)能够分别准确识别 3、修正了多盘符驱动器(如多合一读卡器之类)时列表混乱的问题 4、进一步优化视觉体验,改进了提示设备名称的算法,更美观 v2.20 1、改变界面显示算法,彻底摆脱了巨大而且烦人的OCX"库"文件! 2、修正两个关于界面的小bug 3、增加了鼠标指向超长的设备名称时弹出提示标签显示设备完整名称 V2.10 优化系统资源占用率 V2.03 1.识别包含虚拟光盘的设备不需重新插拔即可得到虚拟光盘的盘符 2.从根本上杜绝了盘符出现[*:]的问题,只要Windows认盘,ChipGenius就能识别,识别过程中某些情况偶尔出现[*:],不过几秒之内一定能得到正确的盘符 3.改进了界面一个小bug,在Win2000下显示更清爽(因为旧版本在某些情况下显示会一团糟……) V2.01 1.改进了识别算法,获取驱动器号的速度加快n倍 2.在精简版WindowsXP下实现实时监测设备插入拔出 3.大大降低了静态时的CPU占用率(从原来的40%左右降低到小于8%) 4.专门针对多盘符设备优化,大大加快了检测多合一读卡器的速度 5.优化界面显示,不会出现字符串长到文本框外面去的问题 V1.70 优化了数据库装载,加快启动速度。增加了一个节日彩蛋^_^ V1.68 修正一处小Bug,微调了软件界面 V1.67 支持在WinXP精简版下运行 V1.59 增加设备版本查询,增加相关方案资料下载链接地址 V1.50 增强了对带有虚拟光盘(USB-CDROM)的U盘识别能力,修改了两个小Bug -------------------------------------- 问题反馈:http://bbs.mydigit.cn/read.php?tid-18285.html -------------------------------------- 欢迎USB设备厂商为我们提供最新信息,联系邮箱:mydigit@vip.163.com -------------------------------------- 使用声明: 我们不保证ChipGenius检测信息的准确性,查询结果仅供参考。
ChipGenius是一款USB设备芯片型号检测工具,可以自动查询U盘、MP3/MP4、读卡器、移动硬盘等一切USB设备的主控芯片型号、制造商、品牌、并提供相关资料下载地址。当然也可以查询USB设备的VID/PID信息、设备名称、接口速度、序列号、设备版本等。   软件绿色小巧,即插即用,是数码消费者、电子爱好者、DIY人士和数码维修人员身边的好帮手。 应用举例: 1、快速修复U盘:不用拆机即可查询U盘的芯片型号,快速找到对应的量产工具 2、帮你识别假冒U盘:还怕买到假冒U盘吗?随时带上我吧(配合MyDiskTest更佳) 3、专业选购MP3:MP3主控方案一般厂家都不说,而芯片又是选购MP3的重要指标 4、识别假IPOD:我一直怀疑自已的IPOD是假的,又无法拆开,这个任务交给我搞定 5、维修好帮手:数码维修人员整天和数码产品打交道,我的出现就是你的得力助手 6、其它USB存储:买读卡器、移动硬盘、USB-Hub....,从专业角度帮你挑选对比 7、其它USB外设:摄像头、USB鼠标、打印机、USB声卡....,免拆壳哦 8、主板芯片组:看芯片型号、找驱动、查主板性能,有我更轻松 9、后续还有更多神秘功能,等你来发掘...... -------------------------------------- 版本更新: V3.00 1、新增在线升级功能,检测设备的准确性大幅提升 2、修订繁体语言的描述,更加符合语法习惯 V2.72 1.修正英文界面版本号显示为2.64的小bug 2.增加繁体中文语言界面 V2.70 1.改进了检测算法,结果更加准确,增强了实用性 2.修正了一些极小的细节问题 3.新增大量国外存储设备识别信息 V2.64 1.修正未分区的移动硬盘出现盘符 *: 问题 2.人性化的自动选定第一个USB存储设备,若没有,自动选择第一个USB外设,若还没有,则选定第一个USB主板控制器 V2.60 1、优化了启动加载数据库的过程,在启动过程中插拔设备不会造成程序锁死 2、改善了对非中文或英文操作系统的支持,可以在没有中文字库的机器上运行 V2.50 1、增加英文语言界面,并可根据操作系统自动识别 2、修正Windows系统下大字体界面变形的问题 3、改正了某些库里没有产品厂家和名称显示为空白的问题。 V2.38 1、优化了内存占用 2、修正界面显示一小Bug 3、新增一些非存储USB设备识别 v2.30 1、更正了在Win2000系统下对带有虚拟光盘(USB-CDROM)的U盘支持不好的问题 2、对于同一设备带有多个序列号的情况(每个盘符对应设备序列号不同)能够分别准确识别 3、修正了多盘符驱动器(如多合一读卡器之类)时列表混乱的问题 4、进一步优化视觉体验,改进了提示设备名称的算法,更美观 v2.20 1、改变界面显示算法,彻底摆脱了巨大而且烦人的OCX"库"文件! 2、修正两个关于界面的小bug 3、增加了鼠标指向超长的设备名称时弹出提示标签显示设备完整名称 V2.10 优化系统资源占用率 V2.03 1.识别包含虚拟光盘的设备不需重新插拔即可得到虚拟光盘的盘符 2.从根本上杜绝了盘符出现[*:]的问题,只要Windows认盘,ChipGenius就能识别,识别过程中某些情况偶尔出现[*:],不过几秒之内一定能得到正确的盘符 3.改进了界面一个小bug,在Win2000下显示更清爽(因为旧版本在某些情况下显示会一团糟……) V2.01 1.改进了识别算法,获取驱动器号的速度加快n倍 2.在精简版WindowsXP下实现实时监测设备插入拔出 3.大大降低了静态时的CPU占用率(从原来的40%左右降低到小于8%) 4.专门针对多盘符设备优化,大大加快了检测多合一读卡器的速度 5.优化界面显示,不会出现字符串长到文本框外面去的问题 V1.70 优化了数据库装载,加快启动速度。增加了一个节日彩蛋^_^ V1.68 修正一处小Bug,微调了软件界面 V1.67 支持在WinXP精简版下运行 V1.59 增加设备版本查询,增加相关方案资料下载链接地址 V1.50 增强了对带有虚拟光盘(USB-CDROM)的U盘识别能力,修改了两个小Bug -------------------------------------- 问题反馈:http://bbs.mydigit.cn/read.php?tid-18285.html -------------------------------------- 欢迎USB设备厂商为我们提供最新信息,联系邮箱:mydigit@vip.163.com -------------------------------------- 使用声明: 我们不保证ChipGenius检测信息的准确性,查询结果仅供参考。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧