如何唯一识别一个USB设备?

24

是否可能通过像操作系统具有Mac-ID、硬盘ID、以太网卡ID等唯一标识符来识别USB设备?我知道可以很容易地更改USB分区的卷序列号,或者在用户格式化时更改。

但是,是否有一种ID,类似于“USB硬盘ID或USB硬件ID”,可以通过MFC的(Visual C++或C#)使用WMI服务检索?这样的标识符是否对物理设备唯一?请澄清一下...


有时候会有价格便宜的网络适配器,其MAC地址相等或为零。 - Vi.
@Vi. 你能解释一下你的评论吗? - highlander141
有时候会出现一些“略微不同”的设备,从计算机的角度来看它们实际上是“相同”的,并且即使标准要求唯一序列号,它们也没有或者拥有相同的序列号。为什么需要区分任意的USB设备呢?或者你只需要针对特定的设备,比如大容量存储器或网络适配器进行区分吗? - Vi.
3
你的实际、更大的问题是什么?(参考链接:http://mywiki.wooledge.org/XyProblem) - Vi.
1
我需要的是,我正在一个项目中,该项目需要将 USB 插入任何连接到互联网的计算机上,然后会有一个自动运行的.xxx(exe 或某些脚本)来检测此 USB 并打开一个 web 门户网站,只能通过该 USB 的 id 访问该网站,该 id 将是在加载 web 门户网站时生成的 SESSION_ID 的组合... - highlander141
1个回答

28
任何USB设备中最接近“唯一编号”的等价物是VID和PID,即厂商ID和产品ID。它用于识别设备并安装适当的驱动程序。然而,对于同一产品,它是相同的数字集合,不足以识别您手中的特定设备。因此,无法实施许可证验证程序,这可能是您想要的内容。
仅有某种类型的USB设备实现了序列号。您可以从闪存驱动器中意外获得它,原因是驱动器格式化程序生成卷序列号。同样是无用的,因为它可以轻松更改。 USB WiFi 适配器可能有效,制造商必须生成一个唯一的MAC地址。
有一类USB设备非常适合实现此目标。通用名称为“加密狗”,它们是为此而制作的。购买时,您还会获得软件,您可以将其链接到程序中,以提供防篡改的方式来验证许可证号码,这是许可证验证程序的另一个重要部分,通常是弱点。关于加密狗的更多信息,请参见维基百科文章

2
关于 VID 和 PID。从我所能找到的资料来看,厂商 ID 和产品 ID 是 USB 设备中 USB 组件的 ID,而不是设备本身的 ID。换句话说,来自不同供应商的不同 USB 物理设备,尽管提供类似的功能,但可能从特定供应商获取相同的 USB 组件。你得到的 VID 和 PID 是针对 USB 组件的,而不是识别 USB 组件所属的设备。要确定使用 USB 组件构建的实际设备的特性,您必须进行其他查询。 - Richard Chambers
CP2102 USB转UART具有完整的串行号支持,您可以使用他们的官方程序CP210xSetIDs.exe轻松更改串行号。 - SuB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接