关于USB枚举多端口跳变问题以及注册表修改无效

ouziwen120624 2014-09-28 12:08:34
各位大大:最近在做windows USB开发的时候遇到一个问题:一个USB设备在OS枚举阶段,会有一个serNumber,这个串可以从USB设备中获得,也可以是 windows分配,但是因为有的USB设备中的串是固定的(比如一个型号的手机),所以为了多端口的区分,需要强制让windows来分配这个串,因此我修改了注册表:
在路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Usbflags增加一项:IgnoreHWSerNumXXXXXXXX,X代表的是PID和VID的组合,并将其值设置为1.这个更改确实起了作用,在绝大部分电脑上都解决了端口跳变的问题 ,但是在有的PC上,注册表修改成功了,但是不起作用,请知道的大哥大姐帮忙告诉下,我是不是需要其它的设置?万分感谢。
...全文
1040 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
小龙马2 2015-05-24
  • 打赏
  • 举报
回复
我碰到的问题是,在一个usb集线器上插多个cp2102串口转接板,产生的串口号不断地跳变,无法确定串口号和USB插口之间的对应关系。
小龙马2 2015-05-24
  • 打赏
  • 举报
回复
我也想知道,如何才能解决跳变问题呢?
子目 2015-05-20
  • 打赏
  • 举报
回复
你好!能告知是如何解决usb3.0上端口跳变的问题吗
ouziwen120624 2014-12-29
  • 打赏
  • 举报
回复
首先感谢各位DD的关注和回复,或许我描述的不是很清楚,实际上我是知道怎么去找到各种各样的USN设备的,我所不清楚的是:一个设备在整个的操作过程中端口等会变,而 需要的又是多路同时操作,所以我的问题就出在绑定上。目前已经OK了,结合PC驱动开发相关知识,结合注册表,可以解决USB3.0上面出现的问题。结贴啦。
阿先森 2014-11-27
  • 打赏
  • 举报
回复
不妨使用CxDeviceFind设备查找类 http://www.cnblogs.com/EdmundDwyane/p/3187226.html 然后使用CreateFile,WriteFile,ReadFile,直接操作 或者使用CxSerial串口类 http://www.cnblogs.com/EdmundDwyane/p/3174308.html
ouziwen120624 2014-10-08
  • 打赏
  • 举报
回复
引用 10 楼 Idle_ 的回复:
On Microsoft TechNet: IgnoreHWSerNumXXXXYYYY=1 works for USB 2.0 but no longer working for USB 3.0 since that on Windows 7, USB3 ports are controlled by custom driver stacks which might not honor any of the registry keys defined by Microsoft. On upgrade to Windows 8/8.1, this issue should be resolved because Microsoft USB stack should take over the 3.0 ports as well.
这个我觉得会是导致这个问题的原因,修改注册表本质上利用的是windows的功能,应该是某些条件不满足导致不起作用,不知道这个大哥在哪找到的这部分说明,我想去看下有没有对我有用的其它信息,非常感谢了
ouziwen120624 2014-10-08
  • 打赏
  • 举报
回复
引用 9 楼 SiGoYi 的回复:
楼主确认一下不好使的机器写的注册表和好用的机器写的是否一致?注意一下64位系统和32位系统写注册表的位置不一致,是不是由于没有读出来引起的?
应该不存在这个问题,因为我有两个笔记本,相同的OS,但是就是一个Ok,另一个不Ok
ouziwen120624 2014-10-08
  • 打赏
  • 举报
回复
放假没上BBS,首先感谢下大家的关注,然后再仔细看回复。
wushuang443 2014-09-30
  • 打赏
  • 举报
回复
usb编程,要么就用createfile方式来操作usb,也可以用createfile来操作串口,操作usb的话用vid,pid标示,像vid,pid会变的我没做过,另外虚拟成串口的好像也没楼主说的,多个?可能是对你的说明不够了解,不懂你要干啥。
阿呆_ 2014-09-30
  • 打赏
  • 举报
回复
On Microsoft TechNet: IgnoreHWSerNumXXXXYYYY=1 works for USB 2.0 but no longer working for USB 3.0 since that on Windows 7, USB3 ports are controlled by custom driver stacks which might not honor any of the registry keys defined by Microsoft. On upgrade to Windows 8/8.1, this issue should be resolved because Microsoft USB stack should take over the 3.0 ports as well.
SiGoYi 2014-09-30
  • 打赏
  • 举报
回复
楼主确认一下不好使的机器写的注册表和好用的机器写的是否一致?注意一下64位系统和32位系统写注册表的位置不一致,是不是由于没有读出来引起的?
ouziwen120624 2014-09-29
  • 打赏
  • 举报
回复
继续等待方法,同时自己继续试验新的方案...谢谢楼上...
ouziwen120624 2014-09-28
  • 打赏
  • 举报
回复
自己先顶一下,希望能尽快解决它。
笨笨仔 2014-09-28
  • 打赏
  • 举报
回复
VID和PID都不能唯一确定设备,因此可能需要另辟途径,提高软件的智能度,对不起,对你的工程不了解,在这帮不了你。
ouziwen120624 2014-09-28
  • 打赏
  • 举报
回复
因为我现在做的是手机软件的升级工具,需要支持多个手机同时下载软件,这些手机的PID是一样的,所以才需要绑定,而且每一个手机的下载过程中,PID还会改变。那么请教下,针对这种情况,你有比较好的解决方案么?还请指点指点。
笨笨仔 2014-09-28
  • 打赏
  • 举报
回复
我不通过COM使用USB,但我不清楚,PID是设备的产品识别码,不同的设备当然会不同,为什么要搞什么绑定,通常我们写的程序要的就是兼容性高,你的方法可见不是最佳,希望再分析一下应用,找到最佳解决方案。
ouziwen120624 2014-09-28
  • 打赏
  • 举报
回复
感谢2楼 现在我是需要使用COM口来和USB设备进行通讯,但是由于在整个的过程中,USB设备需要重启(PID会变),然后端口就从一个变成另一个,为了使工具能将这两个不同的COM口设别并绑定到一个设备上,我使用了USB设备在枚举过程中获得的serial number来作为唯一标示,但是有一些USB设备具有相同的serial number,因此我通过修改注册表的方式来实现让每个USB设备具有一个唯一的serial number,这种方法在绝大多数PC上是有效的,但是目前发现有少数PC注册表修改成功,却不能让windows给USB分配一个唯一的serial number。 所以我的问题是:是否这个修改注册表的方法不行?或者是我修改的不全,还需要进行其它的操作么?
笨笨仔 2014-09-28
  • 打赏
  • 举报
回复
没看懂你的意思,不知你的USB通信程序介于哪种方式,HID?WINUSB?还是介于COM?

2,640

社区成员

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

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