USB 复合设备上的接口集合枚举概述

复合 USB 设备上的接口可以分组到集合中。 USB 泛型父驱动程序 (Usbccgp.sys) 可以通过四种方式枚举接口集合。

这四种接口集合枚举方法按以下方式分层排列:

  1. 供应商提供的回调例程

    如果供应商已向 USB 泛型父驱动程序 (Usbccgp.sys) 注册回调例程,则泛型父驱动程序优先于回调例程,并允许回调例程对接口进行分组,而不是使用其他方法。 有关使用供应商提供的回调例程枚举接口集合的详细信息,请参阅 USB 复合设备上的接口集合枚举

  2. 联合函数描述符

    . 如果供应商已在 USB 泛型父驱动程序中启用了 CDC 和 WMCDC 枚举,则泛型父驱动程序使用 联合功能描述符 (UFD) 将接口分组到集合中。 启用后,此方法优先于所有其他方法,供应商提供的回调例程除外。

  3. 接口关联描述符

    如果 存在接口关联描述符 (IAD) ,USB 泛型父驱动程序始终使用 IAD(而不是旧方法)对接口进行分组。 Microsoft 建议供应商使用 IAD 来定义接口集合。

  4. 旧版音频方法

    USB 泛型父驱动程序能够使用为音频功能保留的旧技术枚举接口集合。 如果设备上有任何 IAD,则泛型父驱动程序不使用此方法。

为复合设备自定义接口集合的枚举

某些 USB 设备具有 USB 接口关联描述符 (IAD) 无法描述的接口集合。 在 Windows Vista 和更高版本的操作系统中,供应商可以自定义 USB 通用父驱动程序 (Usbccgp.sys) 定义和枚举设备接口集合的方式。 这是通过筛选器驱动程序中的 枚举回调例程 完成的。 回调例程可帮助泛型父驱动程序为设备定义自定义接口集合。

若要使泛型父驱动程序定义自定义接口集合,复合设备的供应商必须:

  1. USBC_START_DEVICE_CALLBACK) (实现枚举回调例程。
  2. 提供指向 USB 设备配置接口中的回调例程的指针, (USBC_DEVICE_CONFIGURATION_INTERFACE_V1) 的 StartDeviceCallback 成员。
  3. 提供与复合设备的设备 ID 匹配的 INF 文件,并显式加载 USB 泛型父驱动程序和筛选器驱动程序。

实现注意事项

包含枚举回调例程的筛选器驱动程序可以是上限筛选器驱动程序,也可以是低级筛选器驱动程序。 当 USB 泛型父驱动程序收到启动复合设备的 IRP_MN_START_DEVICE 请求时,它会通过向驱动程序堆栈顶部发送 IRP_MN_QUERY_INTERFACE 请求来查询 USB 设备配置接口。

收到IRP_MN_QUERY_INTERFACE请求时,筛选器驱动程序必须在请求的 InterfaceType 成员中检查 GUID 类型,以验证请求的接口的类型USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID。 如果是,则筛选器驱动程序返回指向 IRP 的 Interface 成员中的 接口 的指针。

枚举回调例程必须返回指向 函数描述符 数组的指针, (描述接口集合 USBC_FUNCTION_DESCRIPTOR) 。 每个函数描述符都包含一个接口描述符数组, (描述接口集合USB_INTERFACE_DESCRIPTOR) 。 回调例程必须从非分页池中分配函数描述符和接口描述符。 泛型父驱动程序释放此内存。 回调例程必须确保每个USB_INTERFACE_DESCRIPTORNumberOfInterfaces 成员准确报告接口集合中的接口数。

泛型父驱动程序为每个函数描述符 (PDO) 创建物理设备对象。

通用父驱动程序例程中汇总了 USB 设备配置接口和枚举回调 例程

USB 通用父驱动程序加载机制

当复合设备满足 枚举 USB 复合设备中所述的要求时,操作系统会生成 兼容的 ID USB\COMPOSITE ,以指示该设备是复合设备。 兼容 ID 在 Usb.inf 中生成匹配项,操作系统无需供应商提供的 INF 文件帮助即可自动加载 USB 通用父驱动程序。

但是,此默认机制不适用于需要接口集合自定义枚举的复合设备,因为在默认机制中,系统不会加载供应商提供的筛选器驱动程序。 若要使枚举回调例程机制正常工作,当 USB 泛型父级枚举复合设备的接口集合时,必须已加载公开 USB 设备配置接口的筛选器驱动程序。 这要求复合设备的供应商安装与复合设备的设备 ID 匹配的 INF 文件,并显式加载 USB 通用父驱动程序和筛选器驱动程序。

对无线移动通信设备类的支持

在 Windows Vista 中, USB 通用父驱动程序 (Usbccgp.sys) 为通用串行总线 (USB) 通信设备类 (CDC) 和 USB 无线移动通信设备类 (WMCDC) 提供支持。

USB 无线移动通信设备类 (WMCDC) 规范为主机与无线移动设备之间的连接、控制和内容交换建立了标准, (例如,当设备连接到 USB 端口时,手机) 。 WMCDC 是 CDC) (通信设备类的扩展,其中包括各种通信和网络设备。 本部分介绍在 Windows 操作系统中支持 CDC 和 WMCDC 设备的体系结构。

WMCDC 设备由分组到 逻辑手机中的多个函数组成。 大多数 WMCDC 设备都有一个逻辑手机,但一个设备可能有多个逻辑手机。 逻辑手机通常包括数据/传真调制解调器、对象存储和呼叫控制设施等功能。 逻辑手机可能还包括由其他 USB 规范定义的支持功能,例如 USB 音频类规范、USB 人类输入设备 (HID) 类规范和 USB 视频类规范。

Windows WMCDC 体系结构使用本机 Windows 驱动程序来管理 WMCDC 设备的功能。 例如,可以使用 Windows 电话应用程序接口 (TAPI) 子系统来管理设备的语音和数据/传真调制解调器功能,并使用 Windows 网络接口规范 (NDIS) 子系统来管理设备的以太网 LAN 功能。 此外,还可以借助 WinUSB (Winusb.sys) 在用户模式软件中管理某些功能,例如对象交换协议 (OBEX) 函数。

此图显示了 WMCDC 设备的示例驱动程序堆栈。

示例设备配置和驱动程序堆栈的关系图。

在上图中,WMCDC 设备包含单个逻辑手机:OBEX 函数和调制解调器函数。 供应商提供的 INF 文件加载本机 Windows 驱动程序以管理调制解调器。 OBEX 函数由供应商提供的用户模式驱动程序管理,该驱动程序在 用户模式驱动程序框架 (UMDF) 中运行。 用户模式驱动程序使用 Windows 可移植设备 (WPD) 协议与用户应用程序通信,以及 WinUSB 导出以与 USB 堆栈通信的接口。 通常,供应商提供的 INF 文件将为使用 Winusb.sys 的每个接口集合加载单独的 Winusb.sys 实例。

注册表设置

USB 堆栈不会自动支持 WMCDC。 必须提供加载 Usbccgp.sys 实例的 INF 文件。 INF 文件必须包含 AddReg 部分,该节将与 Usbccgp.sys 关联的软件键中的 EnumeratorClass 注册表值设置为由三个数字构造的REG_BINARY值:0x02、0x00和 0x 00。 示例 INF 文件中的以下代码示例演示如何将 EnumeratorClass 设置为适当的值。

[CCGPDriverInstall.NT]
Include=usb.inf
Needs=Composite.Dev.NT
AddReg=CCGPDriverInstall.AddReg

[CCGPDriverInstall.NT.Services]
Include=usb.inf
Needs=Composite.Dev.NT.Services

[CCGPDriverInstall.AddReg]
HKR,,EnumeratorClass, 0x00000001,02,00,00

必须分配给 EnumeratorClass 的值由 INF 文件中由 02、00 和 00 对表示的三个 1 字节二进制值构成。 这三个数字分别对应于 USB 实现者论坛分配给 CDC 设备类、CDC 设备子类和 CDC 设备协议的值。

以下主题进一步介绍了 WMCDC:

枚举 WMCDC 上的接口集合

(WMCDC) USB 无线移动通信设备类是 USB 通信设备类 (CDC) 的子类。 WMCDC 规范会扩展,但不会对定义接口集合的 CDC 指南进行重大更改。 具体而言,WMCDC 设备必须符合 CDC 指南来定义接口集合。

CDC 接口集合包含一个主接口 (USB_INTERFACE_DESCRIPTOR) ,该接口属于通信接口类 (bInterfaceClass = 0x02) 或数据接口类 (bInterfaceClass = 0x0A) 。 如果主接口属于通信接口类 (这是) 的典型情况,则主接口的子类 (bInterfaceSubClass) 指定 CDC 控制模型。 控件模型指示接口集合中包含的接口的类型。 有关 USB 实现者论坛定义的控制模型的说明,请参阅 CDC 规范和 WMCDC 规范。

接口集合的主接口后跟一组强制类特定的功能描述符,包括联合函数描述符 (UFD) 。 UFD 列出属于集合的接口编号。 UFD 的 bMasterInterface 字段包含主接口的编号。 零个或多个 bSubordinateInterface 字段包含集合中其他 (从属) 接口的数目。

对于大多数类型的控制模型, USB 泛型父驱动程序 (Usbccgp.sys) 为每个 UFD (PDO) 创建一个物理设备对象。 但某些控件模型包含一个音频接口,泛型父驱动程序从音频接口所属的接口集合中单独枚举该接口。 音频接口显示在接口集合的 UFD) bSubordinateInterface (从属接口列表中,但泛型父驱动程序为音频接口创建单独的 PDO。 音频接口的 PDO 和音频接口所属的接口集合的 PDO 都直接位于设备对象树中父复合设备的功能性设备对象 (FDO) 之上。 音频接口的 PDO 不是接口集合的子级。

有两种控制模型,其枚举特征可在注册表中配置:无线手机控制模型 (WHCM) (定义逻辑手机)和对象 Exchange 协议 (OBEX) 控制模型。 若要配置这两个控制模型的枚举特征,必须提供加载 Usbccgp.sys 实例的 INF 文件,并在软件密钥中为该 Usbccgp.sys 实例设置 CdcFlags 的值。 下表描述了 CdcFlags 的配置选项。

CdcFlags 位 位设置为 0 位设置为 1
0 (mask = 0x00000001) USB 泛型父驱动程序为每个 OBEX 接口创建单独的 PDO。 USB 泛型父驱动程序为所有 OBEX 接口创建单个 PDO。
1 (掩码 = 0x00000010) USB 泛型父驱动程序不会 (逻辑手机) 为 WHCM 接口创建 PDO。 从设备对象树的角度来看,这些接口将保持隐藏状态。 USB 泛型父驱动程序为每个 WHCM 接口创建 PDO。

例如,若要清除这两个位 (将它们设置为 0) ,INF 文件应在 DDInstall.AddReg 节中具有以下行。

HKR, , CdcFlags, 0x00010001, 0x00000000

若要将这两个位设置为 1,INF 文件应具有以下行。

HKR, , CdcFlags, 0x00010001, 0x00000011

若要同时将位 0 设置为 1 和将位 1 设置为 0,INF 文件应具有以下行。

HKR, , CdcFlags, 0x00010001, 0x00000001

可以设置或重置任一位,独立于另一位。

下图演示了不同的注册表配置如何为同一设备创建不同的设备树。

下图演示了 当 CdcFlags 的位 0 和位 1 均为 0 时 PDO 配置。

说明 CdcFlags = 0x00000000 的接口集合到设备对象映射的关系图。

上图中 (WHCM) 接口集合的无线手机控制模型包含三个从属接口集合 (bSubordinateInterface) :两个 OBEX 集合和一个调制解调器集合。 CdcFlags 的位 0 为 0,因此 USB 泛型父驱动程序不会为 WHCM 接口集合创建 PDO。 CdcFlags 的位 1 为 0,因此 USB 泛型父驱动程序为每个 OBEX 接口集合生成单独的 PDO。

下图演示了同时设置 CdcFlags 的第 0 位和第 1 位时的 PDO 配置。

说明 CdcFlags = 0x00010001 的接口集合到设备对象映射的关系图。

由于 CdcFlags 的第 0 位设置为 1,因此 USB 泛型父驱动程序会为 WHCM 接口集合创建 PDO。 由于 CdcFlags 的第 1 位设置为 1,因此 USB 泛型父驱动程序将两个 OBEX 集合组合在一起,并为两个 OBEX 集合生成单个 PDO。

你可能希望在内核级别使用单个 PDO 表示 OBEX 集合,并区分用户模式驱动程序中的每个 OBEX 集合。 Windows 可移植设备 (WPD) 协议可以帮助你在用户级别将所有 OBEX 函数分组到内核级别的单个 PDO 时,在用户级别对不同 OBEX 函数之间的数据流进行多路复用。

以下示例 INF 文件加载 USB 泛型父驱动程序以管理 WMCDC 设备,并指示 USB 泛型父级为逻辑手机创建 PDO,并为逻辑手机中的所有 OBEX 集合创建单个 PDO。

[Version]
Signature="$Windows NT$"
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
Provider=%MSFT%
DriverVer=07/01/2001,5.1.2600.0
CatalogFile=ExampleCatalog.cat
PnpLockdown=1

[ControlFlags]
ExcludeFromSelect=*

[Manufacturer]
CompanyName=CompanyName,NTamd64

[CompanyName.NTamd64]
%COMPANYNAME.DeviceDesc%=CCGPDriverInstall,USB\Vid_????&Pid_????

[CCGPDriverInstall.NT]
Include=usb.inf
Needs=Composite.Dev.NT
AddReg=CCGPDriverInstall.AddReg

[CCGPDriverInstall.NT.Services]
Include=usb.inf
Needs=Composite.Dev.NT.Services

[CCGPDriverInstall.AddReg]
HKR,,EnumeratorClass,0x00000001,02,00,00
HKR,,CdcFlags,0x00010001,0x00010001

[Strings]
MSFT="Microsoft"
COMPANYNAME.DeviceDesc="USB Phone Parent"

处理 CDC 和 WMCDC 接口集合

USB 通用父驱动程序以特殊方式 (WHCM) 接口处理无线手机控制模型。

以下列表汇总了 CDC 和 WMCDC 接口集合的处理与其他接口集合不同的最重要方式:

  • 无线移动通信设备类允许有限数量的接口集合嵌套。 具体而言,逻辑手机接口集合 (即 WHCM 接口集合) 可以包含其他从属接口集合。 例如,符合 WMCDC 的手机可以具有 WHCM 接口集合,后者又包含抽象控制模型集合和 OBEX 集合。
  • 可以将 USB 泛型父驱动程序配置为不枚举 WHCM 接口集合。 未枚举的 WHCM 接口集合将保持隐藏状态,但泛型父驱动程序使用联合函数描述符 (属于 WHCM 接口集合的 UFD) 来对从属接口集合进行分组和枚举。
  • 可以将 USB 泛型父驱动程序配置为为 OBEX 控制模型接口集合创建单独的物理设备对象 (PDO) ,或为所有 OBEX 控制模型接口集合创建单个 PDO。
  • UFD 中的接口编号列表可能有间隙。 也就是说,UFD 的接口编号可以引用不连续的接口。 此类编号无效,例如,对于 USB 接口关联描述符 (IAD) ,其接口必须是连续的且具有序列号。
  • UFD 可以包含相关的音频接口集合
  • CDC 和 WMCDC 接口集合的硬件标识符 (ID) 必须包含接口子类。 其他 USB 接口(其硬件 ID 包含指定接口编号的 MI_%02X 后缀)不包含有关接口子类的信息。 子类信息包含在硬件 ID 中,允许供应商提供具有特定接口集合的硬件 ID 匹配项的 INF 文件,而不是依赖接口在描述符布局中的位置来确定要为集合加载哪个驱动程序。 硬件 ID 中的子类信息还允许逐步迁移路径,从管理 WMCDC 接口集合的当前供应商提供的驱动程序迁移到替代项(例如用户模式驱动程序)。 有关如何设置 USB 接口硬件 ID 格式的一般讨论,请参阅 USB 设备的标识符

CDC 和 WMCDC 控制模型

CDC 和 WMCDC 控制模型部分介绍了 Microsoft Windows 操作系统中支持的接口集合的属性。 除其他事项外,每个说明包括 USB 泛型父驱动程序为接口集合生成的硬件和设备标识符列表 (ID) 。

Windows 支持的大多数接口集合对应于属于通信设备类的控制模型 (CDC) 和无线移动通信设备类 (WMCDC) ,但操作系统也支持旧版音频和视频接口集合以及移动计算促进联盟 (MCPC) 定义的接口集合。

本节中介绍的接口集合如下:

音频类接口

CDC 和 WMCDC 设备上发生的 USB 音频设备类接口集合具有以下属性。

属性 说明
参考 音频设备的通用串行总线设备类定义,版本 1.0。
接口集合中的所有接口都必须属于音频设备类 (0x01) 。
子类 接口集合中的每个接口都必须具有与集合中的第一个接口不同的子类。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 属于流式处理子类 (0x02) 的零个或多个连续接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&MI_%02x
USB\Vid_%04x&Pid_%04x&MI_%02x

音频接口集合的硬件 ID 不包含特定于接口类的信息。
Compatible IDs USB\Class_01&SubClass_01&Prot_00
USB\Class_01&SubClass_01
USB\Class_01

音频接口集合的兼容 ID 的格式包含有关接口类、接口子类和协议的嵌入信息。 对于 CDC 或 WMCDC 设备上的音频接口集合,接口类为 01,子类为 01,协议为 00。

CDC 抽象控制模型

有两个版本的抽象控制模型 (ACM) 。 原始版本在 USB 通信设备类 (CDC) 规范中定义。 (WMCDC) 规范的 USB 无线移动通信设备类 包含 ACM 的扩展定义。

本页介绍了符合 WMCDC 规范的接口集合。

符合 CDC 规范的接口集合具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.6.2 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 ACM (0x02) 。
协议 任何。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的一个数据类接口和可选音频类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_02&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_02
USB\Vid_%04x&Pid_%04x&Cdc_02&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_02
Compatible IDs USB\Class_02&SubClass_02&Prot_%02X
USB\Class_02&SubClass_02
USB\Class_02
特殊处理 UFD 可以引用独立于 ACM 接口集合枚举的音频接口集合。

CDC ATM 网络控制模型

USB CDC ATM 网络控制模型 (ANCM) 接口集合具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.8.3 节
主接口的类 通信接口类 (0x02)
主接口的子类 ANCM (0x07)
协议 无 (0x00)
Enumerated
相关接口 一个由 Union 函数描述符引用的数据类接口 (UFD)
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_07&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_07
USB\Vid_%04x&Pid_%04x&Cdc_07&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_07
Compatible IDs USB\Class_02&SubClass_07&Prot_00
USB\Class_02&SubClass_07
USB\Class_02
特殊处理

CDC CAPI 控制模型

USB CDC 通用 ISDN API (CAPI) 控制模型接口集合具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.7.2 节
主接口的类 通信接口类 (0x02)
主接口的子类 CAPI (0x05)
协议 无 (0x00)
Enumerated
相关接口 联合函数描述符 (UFD) 引用的一个数据类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_05&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_05
Compatible IDs USB\Class_02&SubClass_05&Prot_00
USB\Class_02&SubClass_05
特殊处理

CDC Direct Line 控制模型

(DLCM) 接口集合的 USB CDC Direct Line 控制模型具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.6.1 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 DLCM (0x01) 。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的音频类或供应商定义的接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_01&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_01
USB\Vid_%04x&Pid_%04x&Cdc_01&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_01
Compatible IDs USB\Class_02&SubClass_01&Prot_00
USB\Class_02&SubClass_01``USB\Class_02
特殊处理 UFD 引用独立于 DLCM 接口集合枚举的音频类接口集合。

CDC 以太网控制模型

USB CDC 以太网网络控制模型 (ENCM) 接口集合具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.8.2 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 ENCM (0x06) 。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的一个数据类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_06&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_06
USB\Vid_%04x&Pid_%04x&Cdc_06&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_06
Compatible IDs USB\Class_02&SubClass_06&Prot_00
USB\Class_02&SubClass_06
USB\Class_02
特殊处理 此控件模型的兼容 ID 在 Microsoft 提供的 INF 文件中具有匹配项。 如果操作系统在供应商提供的 INF 文件中找不到其中一个硬件 ID 的匹配项,则系统会自动加载本机 NDIS 微型端口驱动程序来管理接口集合。

CDC 多通道 ISDN 控制模型

USB CDC 多通道 ISDN 控制模型 (MCCM) 接口集合具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.7.1 节
主接口的类 通信接口类 (0x02)
主接口的子类 MCCM (0x04)
协议 无 (0x00)
Enumerated
相关接口 联合函数描述符 (UFD) 引用的多个数据类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_04&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_04
USB\Vid_%04x&Pid_%04x&Cdc_04&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_04
Compatible IDs USB\Class_02&SubClass_04&Prot_00
USB\Class_02&SubClass_04
USB\Class_02
特殊处理

CDC 电话控制模型

(TCM) 接口集合的 USB CDC 电话控制模型具有以下属性。

属性 说明
参考 通信设备的通用串行总线类定义,版本 1.1,第 3.6.3 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 中医 (0x03) 。
协议 任何。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的音频类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_03&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_03
USB\Vid_%04x&Pid_%04x&Cdc_03&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_03
兼容 ID USB\Class_02&SubClass_03&Prot_%02X
USB\Class_02&SubClass_03
USB\Class_02
特殊处理 UFD 可以引用独立于 TCM 接口集合枚举的音频类接口集合。

MCPC 供应商唯一接口

移动计算推广联盟 (MCPC) 在无线移动通信设备类 (WMCDC) 规范为供应商唯一 CDC 设备提供格式之前,定义了接口集合的格式。 因此,MCPC 接口集合不符合 WMCDC 标准。

但是,如果启用了 WMCDC,USB 泛型父驱动程序可以枚举 MCPC 接口集合。 MCPC 接口集合具有以下属性。

属性 说明
参考 移动计算推广联盟 (MCPC) GL-004 规范
CDC (0x02)
子类 0x88
协议 无 (0x00)
Enumerated
相关接口 联合函数描述符 (UFD) 引用的零个或多个数据类接口
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_88&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_88
USB\Vid_%04x&Pid_%04x&Cdc_88&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_88
Compatible IDs USB\Class_02&SubClass_88&Prot_00
USB\Class_02&SubClass_88
USB\Class_02
特殊处理

视频类接口

CDC 和 WMCDC 设备上发生的 USB 视频设备类接口集合具有以下属性。

属性 说明
参考 视频设备的通用串行总线设备类定义,版本 1.0。
视频 (0x0E) 。
子类 视频控制 (0x01) 。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 属于流式处理子类 (0x02) 的零个或多个连续接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&MI_%02x
USB\Vid_%04x&Pid_%04x&MI_%02x
Compatible IDs USB\Class_0E&SubClass_01&Prot_00
USB\Class_0E&SubClass_01
USB\Class_0E
特殊处理 视频类接口集合在 CDC 设备上接收特殊处理。 在非 CDC 设备上,视频类接口集合由接口关联描述符 (IAD) 定义。 在 CDC 设备上,视频类接口集合由联合功能描述符 (UFD) 定义。

WMCDC 抽象控制模型

(ACM) 有两个版本的抽象控件模型。 原始版本在 USB 通信设备类 (CDC) 规范中定义。 (WMCDC) 规范的 USB 无线移动通信设备类包含 ACM 的扩展定义。 包含传真/调制解调器函数的 ACM 集合应使用 ACM 的 WMCDC 定义,而不是原始 CDC ACM 定义。

本页介绍了符合 CDC 规范的接口集合。

符合 WMCDC 规范的接口集合具有以下属性。

属性 说明
参考 无线移动通信设备的通用串行总线 CDC 子类规范,版本 1.0,第 6.2 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 ACM (0x02) 。
协议 如果集合使用 AT 命令集协议,则嵌入在兼容 ID 中的协议值0x01。 如果集合使用 WMCDC 规范描述的协议之一,则嵌入在兼容 ID 中的协议值将通过0x06或0xFE 0x2。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的一个数据类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_Modem&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_Modem
USB\Vid_%04x&Pid_%04x&Cdc_Modem&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_Modem
Compatible IDs USB\Class_02&SubClass_Modem&Prot_%02X
USB\Class_02&SubClass_Modem
USB\Class_02
特殊处理 UFD 可能引用独立于 ACM 接口集合枚举的音频接口集合。

接口集合必须符合 WMCDC 规范第 6.2 节中指定的特殊描述符和终结点要求。 如果接口集合不符合 WMCDC 要求,但接口符合 CDC 要求,则 USB 泛型父驱动程序将使用 CDC 格式枚举接口集合和通用硬件 ID。

此控件模型的兼容 ID 在 Microsoft 提供的 INF 文件中具有匹配项。 如果操作系统在供应商提供的 INF 文件中找不到其中一个硬件 ID 的匹配项,则系统会自动加载本机电话应用程序编程接口 (TAPI) 调制解调器筛选器驱动程序,以管理调制解调器功能并设置相应的 TAPI 注册表设置,除非协议代码0xFE。 如果协议代码0xFE,供应商必须提供设备或类共同安装程序才能正确填充 TAPI 注册表设置。

WMCDC 设备管理模型

USB WMCDC 设备管理模型 (DMM) 接口集合具有以下属性。

属性 说明
参考 无线移动通信设备的通用串行总线 CDC 子类规范,版本 1.0,第 6.6 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 DMM (0x09) 。
协议 任何。
Enumerated 是的。
相关接口 无。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_09&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_09
USB\Vid_%04x&Pid_%04x&Cdc_09&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_09
Compatible IDs USB\Class_02&SubClass_09&Prot_%02X
USB\Class_02&SubClass_09
USB\Class_02
特殊处理 此控件模型不使用联合函数描述符 (UFD) 。

WMCDC 移动 Direct Line 模型

(MDLM) 接口集合的 USB WMCDC 移动 Direct Line 模型具有以下属性:

属性 说明
参考 无线移动通信设备的通用串行总线 CDC 子类规范,版本 1.0,第 6.7 节
主接口的类 通信接口类 (0x02)
主接口的子类 MDLM (0x0A)
协议 任意
Enumerated
相关接口 联合函数描述符 (UFD) 引用的一个或多个数据类接口
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_0A&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_0A
USB\Vid_%04x&Pid_%04x&Cdc_0A&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_0A
Compatible IDs USB\Class_02&SubClass_0A&Prot_%02X
USB\Class_02&SubClass_0A
USB\Class_02
特殊处理 无。

WMCDC OBEX 控制模型 (多个 PDO)

有两种方法可以枚举对象交换协议 (OBEX) 控制模型接口集合:USB 泛型父驱动程序可以将所有 OBEX 接口组合在一起,并创建单个物理设备对象 (所有 OBEX 接口的 PDO) ,或者父驱动程序可以为每个 OBEX 接口创建单独的 PDO。

当 USB 泛型父驱动程序将单独的 PDO 分配给每个 OBEX 接口时,PDO 具有以下属性。

属性 说明
参考 无线移动通信设备的通用串行总线 CDC 子类规范,版本 1.0,第 6.5 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 OBEX (0x0B) 。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的一个数据类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_0B&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_0B
USB\Vid_%04x&Pid_%04x&Cdc_0B&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_0B
Compatible IDs USB\Class_02&SubClass_0B&Prot_00
USB\Class_02&SubClass_0B
USB\Class_02
特殊处理 与管理复合设备的 USB 通用父驱动程序实例关联的注册表设置确定是使用单个 PDO 还是多个 PDO 管理 OBEX 接口。

WMCDC OBEX 控制模型 (单个 PDO)

有两种方法可以枚举对象交换协议 (OBEX) 控制模型接口集合:USB 泛型父驱动程序可以将所有 OBEX 接口组合在一起,并为所有 OBEX 接口创建单个物理设备对象 (PDO) ,或者父驱动程序可以为每个 OBEX 接口创建单独的 PDO。

当 USB 泛型父驱动程序将单个 PDO 分配给所有 OBEX 接口时,PDO 具有以下属性。

属性 说明
参考 无线移动通信设备的通用串行总线 CDC 子类规范,版本 1.0,第 6.5 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 OBEX (0x0B) 。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 联合函数描述符 (UFD) 引用的一个数据类接口。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&WPD_OBEX&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&WPD_OBEX
USB\Vid_%04x&Pid_%04x&WPD_OBEX&MI_%02x
USB\Vid_%04x&Pid_%04x&WPD_OBEX
Compatible IDs USB\Class_02&WPD_OBEX
USB\Class_02
特殊处理 与管理复合设备的 USB 通用父驱动程序实例关联的注册表设置确定是使用单个 PDO 还是多个 PDO 管理 OBEX 接口。 有关指定 USB 泛型父驱动程序枚举 OBEX 接口的方式的注册表设置的说明,请参阅 USB 复合设备上的接口集合的枚举

WMCDC 无线手机控制模型

USB 通用父驱动程序并不总是枚举无线手机控制模型 (WHCM) 接口集合。 与管理 WHCM 接口集合的 USB 泛型父驱动程序实例关联的注册表设置确定 USB 泛型父驱动程序是否为接口集合创建物理设备对象 (PDO) 。 有关指定 USB 泛型父驱动程序如何枚举 WHCM 接口的注册表设置的说明,请参阅 USB 复合设备上的接口集合的枚举

枚举的 WHCM 接口集合具有以下属性。

属性 说明
参考 无线移动通信设备的通用串行总线 CDC 子类规范,版本 1.0,第 6.1 节。
主接口的类 通信接口类 (0x02) 。
主接口的子类 WHCM (0x08) 。
协议 无 (0x00) 。
Enumerated 是的。
相关接口 无。
硬件 ID USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_08&MI_%02x
USB\Vid_%04x&Pid_%04x&Rev_%04x&Cdc_08
USB\Vid_%04x&Pid_%04x&Cdc_08&MI_%02x
USB\Vid_%04x&Pid_%04x&Cdc_08
Compatible IDs USB\Class_02&SubClass_08&Prot_00
USB\Class_02&SubClass_08
USB\Class_02
特殊处理 UFD) (联合功能描述符标识与逻辑手机关联的接口。

上述主题中的硬件 ID 格式介绍了使用以下约定:

  • C 语言 printf 格式表示整数。 例如,“%04x”表示 4 位十六进制整数,“%02x”表示 2 位十六进制整数,依此。
  • 字符串“Vid_”后面的整数是 USB 委员会 (www.usb.org <>) 分配给供应商的供应商代码的 4 位十六进制表示形式。
  • 字符串“Pid_”后面的整数是供应商分配给设备的产品代码的 4 位十六进制表示形式。
  • 字符串“Rev_”后面的整数是设备的修订号的 4 位十六进制表示形式。
  • 字符串“Cdc_”后面的整数是接口子类。
  • 字符串“Prot_”后面的整数是协议编号。
  • 字符串“MI_”后面的整数是从接口描述符的 bInterfaceNumber 字段中提取的接口号的 2 位十六进制表示形式。

使用 IAD 的 USB 设备上接口集合的枚举

如果 USB 复合设备在其固件中具有接口关联描述符 (IAD) ,Windows 会枚举接口集合,就像每个集合都是单个设备一样,并将单个物理设备对象 (PDO) 分配给每个接口集合,并将硬件和兼容标识符 (ID) 与 PDO 相关联。 有关 IAD 的详细说明,请参阅 USB 接口关联描述符。 本部分介绍) 分配给与 IAD 关联的接口集合的硬件 ID 和兼容标识符 (ID。

具有 IAD 的 USB 设备的硬件 ID

USB\VID_v(4)&PID_p(4)&Rev_r(4)&MI_z(2)

USB\VID_v(4)&PID_p(4)&MI_z(2)

在这些硬件 ID 中,

  • v (4) 是 USB 委员会分配给供应商的四位数供应商代码,是从设备描述符的 idVendor 字段中提取的。
  • p (4) 是供应商分配给设备的四位数的产品代码,是从设备描述符的 idProduct 字段中提取的。
  • r (4) 是供应商分配给设备的四位数设备版本号,采用二进制编码的十进制修订,从设备描述符的 bcdDevice 字段提取。
  • z (2) 是从 IAD 的 bFirstInterface 字段提取的两位数接口号。

具有 IAD 的 USB 设备的兼容 ID

USB\Class_c(2)&SubClass_s(2)&Prot_p(2)

USB\Class_c(2)&SubClass_s(2)

USB\Class_c(2)

在这些兼容的 ID 中,c (2) 、 (2) 和 p (2) 包含分别从 IAD 的 bFunctionClassbFunctionSubClassbFunctionProtocol 字段获取的值。

不能以递归方式使用 IAD 来绑定函数的函数。 具体而言,如果设备固件中具有 IAD 描述符,则泛型父驱动程序不会按音频设备类对接口进行分组,如 USB 复合设备上的接口集合枚举中所述。

在没有 IAD 的音频设备上枚举接口集合

对于音频设备,Windows 操作系统可以枚举与函数关联的接口集合 (接口集合) 组,并将单个物理设备对象 (PDO) 分配给每个组,即使设备没有接口关联描述符 (IAD) 也是如此。

如果接口满足以下条件,操作系统会将复合音频设备的接口分组到接口集合中:

  • 接口集合中的所有接口都必须是连续的。 换句话说,这些接口在固件内存中必须彼此相邻。
  • 接口集合中的所有接口都必须属于音频设备类。 设备制造商通过将值0x01分配给接口描述符的 bInterfaceClass 字段来指定接口属于音频设备类。
  • 接口集合中的每个接口都必须具有与集合中的第一个接口不同的子类。接口描述符的 bInterfaceSubClass 字段指定接口的设备子类。

如果接口不满足这三个条件中的所有条件,Windows 将尝试单独枚举它,而不是将其与其他音频类接口分组。

如果设备固件中存在接口关联描述符 (IAD) ,则操作系统不会以特殊方式对音频类接口进行分组。 IAD 方法始终是对 USB 接口进行分组的首选方法。

本部分介绍硬件和兼容标识符 (ID) 与操作系统为接口集合(其接口属于音频设备类)创建的 PDO 关联的 ID。

没有 IAD 的音频设备的硬件 ID

USB\VID_v(4)&PID_p(4)&Rev_r(4)&MI_z(2)

USB\VID_v(4)&PID_p(4)&MI_z(2)

在这些硬件 ID 中,

  • v (4) 是 USB 标准委员会分配给供应商的四位数供应商代码,从设备描述符的 idVendor 字段提取。
  • p (4) 是供应商分配给设备的四位数的产品代码,是从设备描述符的 idProduct 字段中提取的。
  • r (4) 是供应商分配给设备的四位数设备版本号,采用二进制编码的十进制修订,从设备描述符的 bcdDevice 字段提取。
  • z (2) 是从接口描述符的 bInterfaceNumber 字段中提取的两位数接口编号。

无 IAD 的音频设备的兼容 ID

USB\Class_c(2)&SubClass_s(2)&Prot_p(2)

USB\Class_c(2)&SubClass_s(2)

USB\Class_c(2)

在这些兼容的 ID 中,c (2) 、 (2) 和 p (2) 分别包含从每个接口集合中第一个 USB 接口描述符的 bInterfaceClassbInterfaceSubClassbInterfaceProtocol 字段获取的值。