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

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

以下四种接口集合枚举方法按层次结构排列:

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

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

  2. Union 功能描述符

    . 如果供应商在 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 接口 成员中的接口的指针。

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

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

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

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

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

但是,此默认机制不适用于需要自定义接口集合枚举的复合设备,因为在默认机制中,系统不会加载所需的供应商提供的筛选器驱动程序。 若要使枚举回调例程机制正常工作,当 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 功能。 此外,还可以在用户模式软件中管理某些函数,例如对象Exchange协议 (OBEX) 函数,并协助 WinUSB (Winusb.sys) 。

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

sample device configuration and driver stack.

在上图中,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 文件中通过十六进制数字对表示的三个 1 字节二进制值构造的:02、00 和 00。 这三个数字对应于 USB 实现者论坛分别分配给 CDC 设备类、CDC 设备子类和 CDC 设备协议的值。

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

枚举 WMCDC 上的接口集合

USB 无线移动通信设备类 (WMCDC) 是 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 (FDO) 的功能设备对象。 音频接口的 PDO 不是接口集合的子级。

注册表中可配置枚举特征的两种控制模型:无线手机控制模型 (WHCM) ,用于定义逻辑手机,以及对象Exchange协议 (OBEX) 控制模型。 若要配置这两个控制模型的枚举特征,必须提供一个 INF 文件,该文件加载Usbccgp.sys实例,并在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 配置。

diagram illustrating an interface collection to device object mapping for cdcflags = 0x00000000.

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

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

diagram illustrating an interface collection to device object mapping for 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

[ControlFlags]
ExcludeFromSelect=*

[Manufacturer]
CompanyName=CompanyName

[CompanyName]
%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 接口集合保持隐藏状态,但泛型父驱动程序使用联合函数描述符 (UFD 的信息) 属于 WHCM 接口集合,对从属接口集合进行分组和枚举。
  • 可以将 USB 通用父驱动程序配置为为 OBEX 控制模型接口集合创建单独的物理设备对象, (PDO) OBEX 控制模型接口集合,或为所有 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 操作系统中支持的接口集合的属性。 每个说明包括硬件和设备标识符列表, (ID) 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) 规范中定义。 USB 无线移动通信设备类 (WMCDC) 规范包含 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

相关接口

联合功能描述符 (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 Common ISDN API (CAPI) Control Model 接口集合具有以下属性。

属性 说明

参考

通信设备的通用串行总线类定义,版本 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控制模型

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

属性 说明

参考

通信设备的通用串行总线类定义,版本 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 电话控制模型

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) 规范。 USB 无线移动通信设备类 (WMCDC) 规范包含 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模型

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

属性 说明

参考

无线移动通信设备的通用串行总线 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)

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

当 USB 泛型父驱动程序为每个 OBEX 接口分配单独的 PDO 时,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 泛型父驱动程序实例关联的注册表设置确定 OBEX 接口是使用单个 PDO 还是多个 PDO 进行管理。

WMCDC OBEX 控制模型 (单个 PDO)

有两种方法可以枚举对象Exchange协议 (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 泛型父驱动程序实例关联的注册表设置确定 OBEX 接口是使用单个 PDO 还是多个 PDO 进行管理。 有关指定 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_”后面的整数是供应商代码的 4 位十六进制表示形式,USB 委员会 (www.usb.org) 分配给供应商。

  • 字符串“Pid_”后面的整数是供应商分配给设备的错误代码的 4 位十六进制表示形式。

  • 字符串“Rev_”后面的整数是设备的修订号的 4 位十六进制表示形式。

  • 字符串“Cdc_”后面的整数是接口子类。

  • 字符串“Prot_”后面的整数是协议编号。

  • 字符串“MI_”后面的整数是接口编号的 2 位十六进制表示形式,该表示形式是从接口描述符的 bInterfaceNumber 字段中提取的。

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

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

硬件 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 字段中提取的两位数接口号。

Compatible IDs

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

USB\Class_c(2)&SubClass_s(2)

USB\Class_c(2)

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

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

不带 IAD 的音频设备上的接口集合的枚举

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

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

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

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

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

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

硬件 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 字段中提取的两位数接口编号。
Compatible IDs

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

USB\Class_c(2)&SubClass_s(2)

USB\Class_c(2)

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

USB 常规父驱动程序 (Usbccgp.sys)
Microsoft 提供的 USB 驱动程序