根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备。大家可以再U盘连到电脑后在设备管理器的U盘属性里看到这个ID号。
VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID,以便区别相同厂家的不同设备。
扩展资料
U盘的主控芯片决定了用什么量产工具。对于多数U盘来说,比如:金士顿、爱国者、联想、紫光、台电等等,主控芯片由第3方提供;U盘的VID,有的跟U盘品牌一样,而有的跟主控芯片的供应商一样(当U盘品牌没有自己的USB VID)。
U盘的PID则由U盘品牌商决定,并且U盘的PID一般根据主控芯片的不同而定。所以,U盘的VID和PID对于决定量产工具,特别重要。
由于VID和PID重复并不会对产品的使用带来严重影响,很多USB设备生产商(山寨厂居多)为了方便,并不会向USB执行论坛申请自己的VID,而是 依然沿用主控生产商的VID或随便向产品写入VID和PID。
正规厂家只需要申请VID,PID由厂家自行确定,所以存在相同型号的产品,可能采用 了不同的主控(商业需要,很正常),而PID是一样的。基于上述原因,通过VID和PID就不能准确识别USB设备的主控型号,量产网提醒大家在使用USB设备的过程中需要注意这个问题。
这个问题我之前给ANDROID手机程序做PC客户端项目时遇到并处理过,即用户通过数据线将PC与手机连接,当然需要开启USB调试模式等,就像豌豆荚之类的软件那样,插入USB设备自动检测并区分、识别调用特定功能。再说USB是一个标准化组织,每一个USB设备需要遵守其标准,其通过PID及VID区分每个设备,其中VID代表不同厂商或同一厂商不同产品系列,PID代表产品(某个型号),也就是说同型号的PID相同,但一般没有办法提取设备的序列号(唯一特征码),除非厂商提供了SDK中带有相关的函数提供了此功能,目前我没有找到通用的方法解决您这个问题。而且很多厂商不会花钱向USB交钱去申请VID及PID,其只有盗用其它厂商或者自己的VID及PID,因此其经常会有重复的可能。
查pid用规定的类别图形符号和文字代号下会用到设备数据表。设备数据表用规定的类别图形符号和文字代号,装置工艺过程的全部设备、机械和驱动机,包括需就位的备用设备和生产用的移动式设备,并进行编号和标注。
WMI使用的WIN32_类库名访问。
比如VB6代码:
Dim WMIDim i As Integer
Dim aa
Set WMI = GetObject("WinMgmts:")
Set objs = WMIInstancesOf("Win32_ControllerHasHub")
i = 1
For Each obj In objs
aa = objPath_
Enum1 = Enum1 & i & vbTab & aa & vbCrLf
i = i + 1
Next
Enum1里面就是检举出来的usb端口路径,然后自己把字符转换一下就可以了。
具体的你需要检举哪种设备,把WMIInstancesOf(" ")里面的类替换为需要的就可以。
根据设备的Vid和Pid查找指定设备的过程如下:
调用HidD_GetHidGuid获得设备类型GUID
调用SetupDiGetClassDevs获得设备类型GUID的全部信息
调用SetupDiEnumDeviceInterfaces获得特定设备识别信息
调用SetupDiGetDeviceInterfaceDetail获得特定设备路径名
调用CreateFile获得特定设备句柄
调用HidD_GetAttributes获得特定设备的Vid和Pid
完成之后
调用SetupDiDestroyDeviceInfoList销毁一个设备信息集合,并且释放所有关联的内存
简单来说, TCP Receive Window是在TCP连接两端都有的缓冲区, 用于暂时保存到来的数据 在这个缓冲区中的数据会被发送到应用程序中, 为新到来的数据腾出空间 如果这个缓冲满了, 那么数据的接收方会警告发送方在缓冲去清空之前已经不能在收取更多的数据了
这其中涉及到一些细节, 但那都是很基本的东西
一般, 设备会在TCP Header信息中通知对方当前它的TCPWindows的大小
以上就是关于U盘的pid与vid是什么全部的内容,包括:U盘的pid与vid是什么、delphi 获取设备唯一特征码、查pid什么情况下会用到设备数据表呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)