Enumeration of Interface Collections on Audio Devices without IADs
For audio devices, the Windows operating system can enumerate groups of interfaces (interface collections) that are associated with a function and assign a single physical device object (PDO) to each group, even when the device does not have an interface association descriptor (IAD).
The operating system groups the interfaces of composite audio devices into interface collections, if the interfaces meet the following conditions:
- All interfaces in the interface collection must be consecutive. In other words, the interfaces must be adjacent to one another in firmware memory.
- All interfaces in the interface collection must belong to the audio device class. The device manufacturer specifies that an interface belongs to the audio device class by assigning a value of 0x01 to the bInterfaceClass field of the interface descriptor.
- Each interface in the interface collection must have a different subclass from the first interface in the collection.The bInterfaceSubClass field of the interface descriptor specifies the device subclass of the interface.
If an interface does not meet all of these three conditions, Windows will attempt to enumerate it separately instead of grouping it with the other audio class interfaces.
The operating system does not group audio class interfaces in a special way if an interface association descriptor (IAD) is present in device firmware. The IAD method is always the preferred method of grouping USB interfaces.
This section describes hardware and compatible identifiers (IDs) associated with the PDO that is created by the operating system for an interface collection whose interfaces belong to the audio device class.
In these hardware IDs,
- v(4) is the four-digit vendor code that the USB standards committee assigns to the vendor and that is extracted from the idVendor field of the device descriptor.
- p(4) is the four-digit product code that the vendor assigns to the device and that is extracted from the idProduct field of the device descriptor.
- r(4) is the four-digit device release number, in binary coded decimal revision, that the vendor assigns to the device and that is extracted from the bcdDevice field of the device descriptor.
- z(2) is the two-digit interface number that is extracted from the bInterfaceNumber field of the interface descriptor.
In these compatible IDs, c(2), s(2), and p(2) contain values that are taken, respectively, from the bInterfaceClass, bInterfaceSubClass, and bInterfaceProtocol fields of the first USB interface descriptor in each interface collection.
- Enumeration of Interface Collections on USB Composite Devices
- USB Generic Parent Driver (Usbccgp.sys)