如何通过 VID、PID 和 Class 识别设备:Windows 与 Linux 查询教程
本文目录
一、先区分 USB 与 PCI 设备标识
电脑出现未知设备、缺少驱动,或需要确认外设芯片时,可以先读取硬件标识,再查询厂商资料和设备数据库。
USB 设备通常使用 VID、PID;PCI 和 PCIe 设备通常使用 Vendor ID、Device ID,在 Windows 中显示为 VEN、DEV。两类设备的标识不能混用。
| 设备类型 | 标识 | 含义 |
|---|---|---|
| USB | VID(Vendor ID) | 厂商标识 |
| USB | PID(Product ID) | 厂商分配的产品标识,需要与 VID 一起查询 |
| PCI / PCIe | VEN、DEV | 厂商标识与设备标识 |
| USB、PCI / PCIe | Class | 功能类别代码;不同总线采用不同的类别定义 |
这些标识通常能帮助确定芯片或设备系列,但不一定对应唯一的零售型号,也不能代替序列号识别某一台实物。贴牌产品、不同硬件版本和复合设备,还需要结合接口信息、产品标签及厂商驱动确认。
二、Windows:通过设备管理器查询
以下步骤适用于 Windows 10、Windows 11,也可用于具有相应界面的 Windows Server。
- 按
Win + R,输入devmgmt.msc,打开设备管理器。 - 找到目标设备。没有正确安装驱动的设备可能位于“其他设备”下。
- 右键选择“属性”,进入“详细信息”。
- 在“属性”下拉列表中选择“硬件 ID”。
- 复制完整内容;如需查看类别代码,再选择“兼容 ID”。
一个设备可能有多条硬件 ID,通常按匹配精确程度排列。排查时先保留完整列表,不要只截取设备名称。
1. 读取 USB 的 VID 和 PID
USB 硬件 ID 的常见格式如下,字母占位符需替换为实际的十六进制数值:
USB\VID_xxxx&PID_yyyy
USB\VID_xxxx&PID_yyyy&REV_zzzz
VID_xxxx:USB 厂商标识。PID_yyyy:产品标识。REV_zzzz:设备描述符报告的版本值。
复合设备的接口还可能出现:
USB\VID_xxxx&PID_yyyy&MI_00
MI_00 表示接口编号。同一个 USB 设备可以提供多个接口,例如摄像头同时提供视频和麦克风功能;安装驱动时应确认对应的是哪个接口。
2. 读取 PCI / PCIe 的 VEN 和 DEV
PCI / PCIe 设备的硬件 ID 通常具有以下结构:
PCI\VEN_xxxx&DEV_yyyy&SUBSYS_zzzzzzzz&REV_rr
VEN:厂商标识。DEV:设备标识。SUBSYS:子系统标识,进一步区分具体实现。REV:修订标识。
查询驱动时,先用 VEN 和 DEV 缩小范围,再结合完整硬件 ID、电脑型号和系统版本确认。品牌机和笔记本优先使用整机厂商提供的驱动。
三、如何查看 USB Class
Windows 设备管理器中的“兼容 ID”可能包含以下格式:
USB\Class_03&SubClass_01&Prot_01
其中 Class、SubClass 和 Prot 分别表示类别、子类别和协议。不能只看 Class 就确定具体型号。
| USB 类别代码 | 含义 |
|---|---|
0x00 |
设备级类别由接口描述符进一步确定 |
0x01 |
音频 |
0x02 |
通信与 CDC 控制 |
0x03 |
人机接口设备 HID,例如键盘、鼠标 |
0x07 |
打印机 |
0x08 |
大容量存储 |
0x09 |
USB 集线器 |
0x0A |
CDC 数据 |
0x0B |
智能卡 |
0x0E |
视频 |
0xEF |
杂项类别 |
0xFF |
厂商自定义类别 |
类别信息可能位于设备描述符或接口描述符中。看到设备级 Class 00 不表示设备异常,应继续查看各接口的类别。Windows 的“设备类 GUID”也不是这里的 USB Class 数值。
完整定义参见 USB-IF 官方类别代码表。
四、Linux:使用 lsusb 查询 USB 设备
在安装了 usbutils 的 Linux 系统中,执行:
lsusb
输出中的 ID xxxx:yyyy 分别对应 VID 和 PID,数值为十六进制。
根据实际 VID、PID 筛选设备,以下使用格式占位符:
lsusb -d VID:PID
查看详细描述符:
sudo lsusb -v -d VID:PID
将 VID:PID 替换为实际值。重点查看:
idVendor、idProduct:厂商与产品标识。bDeviceClass:设备级类别。bInterfaceClass:接口级类别。bInterfaceSubClass、bInterfaceProtocol:接口子类别和协议。
还可以查看 USB 连接层级:
lsusb -t
参考:lsusb 使用手册。
五、Linux:使用 lspci 查询 PCI / PCIe 设备
在安装了 pciutils 的 Linux 系统中,执行:
lspci -nn
-nn 同时显示名称和数字标识,便于在名称不完整时继续查询。注意输出中可能同时有类别代码和厂商、设备 ID,应结合所在位置区分。
查看设备当前使用的内核驱动及相关模块:
lspci -nnk
如果只查看某个设备,可以根据输出中的总线地址筛选。例如,目标地址为 03:00.0:
lspci -nnk -s 03:00.0
Kernel driver in use 表示当前使用的驱动;Kernel modules 列出可能支持该设备的模块,不等于这些模块都已加载。
参考:lspci 使用手册。
六、查询数据库并确认驱动
获取标识后,可以使用以下数据库辅助查询:
- USB ID 数据库:按 VID、PID 查询。
- PCI ID 数据库:按厂商和设备 ID 查询。
数据库结果用于辅助判断,未收录或名称不准确时,应继续核对设备厂商资料、产品标签及官方驱动支持列表。识别出的名称可能是内部芯片型号,而不是外壳上的品牌型号。
下载驱动时,优先使用整机厂商或设备厂商官网,并确认系统版本、架构及完整硬件 ID。不要仅凭搜索到相同的 VID、PID 就安装来源不明的驱动。
七、未知设备无法读取有效 ID 怎么办
如果设备连有效的 VID、PID 都无法读取,或者提示描述符请求失败,应先排查连接和枚举问题:
- 更换支持数据传输的线材,排除仅充电线。
- 更换 USB 接口,暂时移除扩展坞或集线器后直连测试。
- 检查设备供电,并在另一台电脑上交叉测试。
- 记录设备状态、错误代码和完整硬件 ID,再进行后续排查。
VID、PID 和 Class 是识别线索。确认具体设备时,应把硬件标识、接口类别、实物信息和厂商资料结合起来判断。

