自定义USB视频/PID-制作Windows 7&;8自动选择usbser.sys驱动程序

自定义USB视频/PID-制作Windows 7&;8自动选择usbser.sys驱动程序,usb,usbserial,cdc,usb-descriptor,Usb,Usbserial,Cdc,Usb Descriptor,我正在用微控制器为USB设备开发固件。我使用生成了一个裸机(无操作系统)代码库,将该设备设置为USB CDC(通信设备类),以便Windows 7、8和10自动将其检测为VCP(虚拟COM端口)。驱动程序详细信息显示它正在使用Windowsusbser.sys驱动程序 当我更改USB供应商ID(VID)或产品ID(PID)或制造商字符串时,Windows 10设备管理器仍会快速将其检测为USB串行设备,但Windows 7或8不会检测到。Windows 7和8花了很长时间在Windows U

我正在用微控制器为USB设备开发固件。我使用生成了一个裸机(无操作系统)代码库,将该设备设置为USB CDC(通信设备类),以便Windows 7、8和10自动将其检测为VCP(虚拟COM端口)。驱动程序详细信息显示它正在使用Windows
usbser.sys
驱动程序

当我更改USB供应商ID(VID)或产品ID(PID)或制造商字符串时,Windows 10设备管理器仍会快速将其检测为USB串行设备,但Windows 7或8不会检测到。Windows 7和8花了很长时间在Windows Update中搜索驱动程序,但找不到驱动程序


当设备的USB VID、PID和制造商字符串具有供应商特定的值时,如何修改设备固件/描述符以使Windows 7和8主机能够自动安装设备的
usbser.sys
驱动程序?

问题在于
.inf
文件。在win 10中有一个新的(
usbser.inf
)在win 7和win 8中自动加载驱动程序
usbser.sys
,您必须编写自己的
.inf
文件,将PID和VID链接到
usbser.sys
驱动程序,请参阅和

在Windows 8.1及更早版本的操作系统中,Usbser.sys 连接USB到串行设备时,不会自动加载 一台计算机。要加载驱动程序,您需要编写一个INF 参考调制解调器INF(mdmcpq.INF),包括[Install]和 [需要]部分。这些部分是实例化 服务,复制收件箱二进制文件,并注册设备接口 应用程序查找设备并与其对话所需的GUID。那个 INF将“Usbser”指定为设备堆栈中的低级筛选器驱动程序

资料来源:

在,, 及
win 7和win 8的.inf文件示例。

Windows 10附带了一个名为usbser.inf的新驱动程序,该驱动程序将匹配符合USB CDC ACM规范的设备,并为它们加载usbser.sys驱动程序

要使USB CDC ACM设备在旧版本的Windows上工作,您需要自己提供一个INF文件,当Windows看到带有供应商ID和产品ID的USB设备时,它会告诉Windows加载usbser.sys。对于Windows 7、Vista和XP,只需编写INF文件并将其分发给客户即可。对于Windows 8及更高版本,您将需要购买代码签名证书,然后对INF文件进行签名(或者查看允许您绕过签名检查的软件实用程序,如zadig和libwdi)

请注意,签名与WHQL不同。获得签名证书后,您可以自己对驱动程序进行签名,而无需等待任何时间,也无需获得Microsoft的任何批准

以下是使用usbser.sys的INF文件示例:

我在这篇文章中写了很多关于如何签署驱动程序包的内容:


我是否正确理解在Win7&8中,
.inf
文件是基于{VID,PID,MfrString}选择的,因此我所要求的是不可能的?除非我们获得设备WHQL认证并将其
.inf
添加到Windows Update,否则Windows将在枚举设备时自动安装驱动程序,对吗?或者我们可以在设备中使用Microsoft OS描述符来代替WHQL,让它向主机显示WCID,这样主机就知道选择
usbser.sys
作为驱动程序,而根本不需要
.inf
?您需要.inf文件(WHQL)或MS OS描述符。对于MS OS描述符,不需要.inf()。因此,使用MS OS描述符,这在没有自定义的情况下是可能的。infAn INF文件与WHQL不同。您可以在Windows 7或更低版本上使用未签名的INF文件,即使在Windows 8或更高版本上,签名过程也很简单,您可以在购买代码签名证书后自行完成,无需获得Microsoft的批准。非常感谢您在过去几个月里就USB问题向我提供了多个有用的答案。:)我只想指出,a-star.inf文件确实对我有用。我所要做的就是更改VID/PID值。非常感谢!