windows USB 设备驱动开发-Microsoft 提供的USB驱动

在windows 每一个发行版本中,Microsoft 提供的类驱动程序、泛型客户端驱动程序和父复合驱动程序。

Microsoft 提供的用于控制器和集线器的 USB 驱动程序

Microsoft 提供的 USB 设备类驱动程序

Microsoft 为 USB-IF 批准的多个 USB 设备类提供驱动程序。 驱动程序及其安装文件包含在 Windows 中。 它们在 \Windows\System32\DriverStore\FileRepository 文件夹中可用。

包含在 Windows 中的 USB 设备类驱动程序

本文列出了 Microsoft 为受支持的 USB 设备类提供的驱动程序。

  • USB-IF 批准的设备类的 Microsoft 提供的驱动程序;
  • 对于复合设备,请使用 USB 通用父驱动程序 (Usbccgp.sys),为每个函数创建物理设备对象 (PDO);

对于非复合设备或复合设备的函数,请使用 WinUSB (Winusb.sys)。
如果要安装 USB 驱动程序: 无需下载 USB 设备类驱动程序。 它们会自动安装。 这些驱动程序及其安装文件包含在 Windows 中。 它们在 \Windows\System32\DriverStore\FileRepository 文件夹中可用。 通过 Windows 更新更新驱动程序。

如果要编写自定义驱动程序: 在为 USB 设备编写驱动程序之前,请确定 Microsoft 提供的驱动程序是否满足设备要求。 如果 Microsoft 提供的驱动程序不适用于你的设备所属的 USB 设备类,请考虑使用通用驱动程序、Winusb.sys 或 Usbccgp.sys。 仅在必要时才编写驱动程序。 

USB 设备类

USB 设备类 是具有类似特征并执行常见功能的设备的类别。 USB-IF 定义这些类及其规范。 每个设备类由 USB-IF 批准的类、子类和协议代码标识,所有这些类均由固件中的设备描述符中的 IHV 提供。 Microsoft 为其中几个设备类(称为 USB 设备类驱动程序)提供内置驱动程序 。 如果属于受支持的设备类的设备连接到系统,Windows 会自动加载类驱动程序,并且设备无需其他驱动程序即可正常运行。

硬件供应商不应为受支持的设备类编写驱动程序。 Windows 类驱动程序可能不支持类规范中描述的所有功能。 如果设备的某些功能未由类驱动程序实现,供应商应提供与类驱动程序配合使用的补充驱动程序,以支持设备提供的整个功能范围。

USB 类规范和类代码的最新列表记录在 USB-IF 定义的类代码列表中。

设备安装程序类

Windows 通过指示设备功能设备安装程序类来对设备分类 。

Microsoft 为大多数设备定义安装程序类。 IHV 和 OEM 可以定义新的设备安装程序类,但前提是现有类都不适用。

USB 设备的两个重要设备安装程序类如下所示:

  • USBDevice {88BAE032-5A81-49f0-BC3D-A4FF138216D6}:IHV 必须为不属于其他类的自定义设备使用此类。 此类不用于 USB 主机控制器和集线器。
  • USB {36fc9e60-c465-11cf-8056-444553540000}:IHV 不得将此类用于其自定义设备。 这是为 USB 主机控制器和 USB 集线器保留的。

设备安装程序类与前面讨论的 USB 设备类不同。 例如,音频设备的描述符中具有 USB 设备类代码 01h。 连接到系统时,Windows 加载 Microsoft 提供的类驱动程序 ,Usbaudio.sys。 在“设备管理器”中,设备显示在“声音”、“视频和游戏控制器”下,表示设备安装程序类为“媒体” 。

Microsoft 提供的 USB 设备类驱动程序
USB 串行驱动程序 (Usbser.sys)

将 Microsoft 提供的 USB 驱动程序 (Usbser.sys) 用于通信和 CDC 控制设备。 Microsoft 鼓励你尽可能使用 Windows 附带的驱动程序。

支持的版本

  • Windows 11
  • Windows 10

适用于
CDC 控制设备的设备制造商
在 Windows 10 中,驱动程序已使用内核模式驱动程序框架重写,从而提高了驱动程序的整体稳定性。

  • 改进了驱动程序即插即用和电源管理。
  • 添加了电源管理功能,如 USB 选择性挂起。

此外,UWP 应用程序现在可以使用 Windows.Devices.SerialCommunication 命名空间提供的 API,这些 API 允许应用与这些设备通信。

Usbser.sys 安装

为通信和 CDC 控制设备加载 Microsoft 提供的内置驱动程序 (Usbser.sys) 。

 备注 如果你尝试安装 Windows 中包含的 USB 设备类驱动程序,则不需要下载该驱动程序。 它们将自动进行安装。 如果未自动安装,请与设备制造商联系。

从 Windows 10 开始,Usbser.inf 已添加到 %Systemroot%\INF 目录,该目录 Usbser.sys 作为功能设备对象加载 (设备堆栈中的 FDO) 。 如果设备属于通信和 CDC 控制设备类,则会自动加载 Usbser.sys 。 无需编写自己的 INF 即可引用驱动程序。 驱动程序是基于与包含在 Windows 中的其他 USB 设备类驱动程序相似的兼容 ID 匹配来加载的。

USB\Class_02

USB\Class_02&SubClass_02
  • 如果要自动加载 Usbser.sys ,请在 设备描述符中将类代码设置为 02,将子类代码设置为 02。 使用此方法时,无需为设备分发 INF 文件,因为系统使用 Usbser.inf; 
  • 如果设备指定类代码 02,但子类代码值不是 02, 则不会 自动加载Usbser.sys。 即插即用管理器尝试查找驱动程序。 如果未找到合适的驱动程序,则设备可能未加载驱动程序。 你可能必须加载自己的驱动程序或编写引用另一个内置驱动程序的 INF;
  • 如果你的设备将类和子类代码指定为 02,并且你想要加载另一个驱动程序而不是 Usbser.sys,则必须编写一个 INF,指定要安装的设备的硬件 ID 和驱动程序。 例如,查看示例驱动程序中包含的 INF 文件,并查找与你的设备类似的设备;
为 Usbser.sys 配置选择性挂起

从 Windows 10 开始, Usbser.sys 支持 USB 选择性挂起。 它允许连接到串行设备的 USB 在不使用时进入低功耗状态,同时系统保持在 S0 状态。 恢复与设备的通信时,设备可以保留挂起状态并恢复工作状态。 此功能在默认情况下处于禁用状态,可以通过设置此注册表项下的“IdleUsbSelectiveSuspendPolicy”项来启用和配置:

HKEY\_LOCAL\_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\<hardware id>\\<instance id>\\Device Parameters

若要配置 Usbser.sys的电源管理功能,可以将 IdleUsbSelectiveSuspendPolicy 设置为:

  • “0x00000001”:空闲时(即,当没有活动数据传输到或从设备传输时)进入选择性挂起。
  • “0x00000000”:仅当设备没有打开的句柄时才进入选择性挂起。

可以通过以下两种方式之一添加该条目:

  • 编写一个引用安装 INF 的 INF,并在“HW.AddReg”部分添加注册表项。
  • 在扩展属性 OS 功能描述符中描述该注册表项。 添加自定义属性,将“bPropertyName”字段设置为 Unicode 字符串“IdleUsbSelectiveSuspendPolicy”,将“wPropertyNameLength”设置为 62 。 将“bPropertyData”字段设置为“0x00000001”或“0x00000000”。 属性值存储为小字节序 32 位整数。
为 USB CDC 设备开发 Windows 应用程序

从 Windows 10 开始,Windows 应用可以使用 Windows.Devices.SerialCommunication 命名空间将请求发送到 Usbser.sys。 它定义了 Windows 运行时类,这些类可用于通过串行端口或某个串行端口抽象与 USB CDC 设备通信。 这些类提供了发现此类串行设备、读写数据和控制流控制的串行特定属性(如设置波特率、信号状态)的功能。

Microsoft 定义的 USB 驱动程序框架

 Microsoft 为没有自己的 USB 设备类规范的 USB 设备提供了独特的驱动程序框架。

Microsoft 为没有自己的 USB 设备类规范的某些类型的 USB 设备提供了驱动程序框架。 想要开发这些类型的设备的供应商应开发使用设备类型的指定框架的设备驱动程序。

USB 设备注册表项

用于配置 USB 驱动程序堆栈行为的注册表设置
本文中所述的注册表项可在此项下找到:

HKEY_LOCAL_MACHINE
   SYSTEM
      CurrentControlSet
         Control
            usbflags
               <vvvvpppprrrr>
                  <Device-specific registry entry>

在 vvpppprrrr 键中,

  • vvvv 是标识供应商的 4 位十六进制数字
  • pppp 是标识产品的 4 位十六进制数字
  • rr 是包含设备的修订号的 4 位十六进制数。

供应商 ID、产品 ID 和修订号值是从 USB 设备描述符获取的。 USB_DEVICE_DESCRIPTOR结构描述设备描述符。

下表描述了 vvvvpppprrrr 键的可能注册表项。 USB 驱动程序堆栈将这些条目视为只读值。


在 Windows 上枚举设备信息后查找设备信息

查看设备接口 GUID、硬件 ID 和设备 类 的相关信息

  1. 查找公开你感兴趣的设备接口的设备,并记下实例 ID。 例如,如果设备接口属于类 {A5DCBF10-6530-11D2-901F-00C04FB951ED},则可以使用以下项找到正确的设备接口和设备:
    >pnputil /enum-interfaces /class {A5DCBF10-6530-11D2-901F-00C04FB951ED} /instanceid
    
    Microsoft PnP Utility
    
    Interface Path:         \\?\USB#VID_045E&PID_0840#0C33CG9212501N0#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
    Interface Description:  Unknown
    Interface Class GUID:   {a5dcbf10-6530-11d2-901f-00c04fb951ed}
    Device Instance ID:     USB\VID_045E&PID_0840\0C33CG9212501N0
    Interface Status:       Enabled
    
    Interface Path:         \\?\USB#VID_045E&PID_07A5#5&109d12e&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
    Interface Description:  Unknown
    Interface Class GUID:   {a5dcbf10-6530-11d2-901f-00c04fb951ed}
    Device Instance ID:     USB\VID_045E&PID_07A5\5&109d12e&0&1
    Interface Status:       Enabled
  2. 检索设备的兼容 ID 列表,并记下设备类、子类和协议代码:
     
    >pnputil /enum-devices /instanceid "USB\VID_045E&PID_0840\0C33CG9212501N0" /ids
    
    Microsoft PnP Utility
    
    Instance ID:                USB\VID_045E&PID_0840\0C33CG9212501N0
    Device Description:         USB Composite Device
    Class Name:                 USB
    Class GUID:                 {36fc9e60-c465-11cf-8056-444553540000}
    Manufacturer Name:          (Standard USB Host Controller)
    Status:                     Started
    Driver Name:                usb.inf
    Hardware IDs:               USB\VID_045E&PID_0840&REV_0215
                                USB\VID_045E&PID_0840
    Compatible IDs:             USB\COMPAT_VID_045E&DevClass_00&SubClass_00&Prot00
                                USB\COMPAT_VID_045E&DevClass_00&SubClass_00
                                USB\COMPAT_VID_045E&DevClass_00
                                USB\DevClass_00&SubClass_00&Prot_00
                                USB\DevClass_00&SubClass_00
                                USB\DevClass_00
                                USB\COMPOSITE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值