Enumeration of Interface Collections on USB Devices with IADs
If a USB composite device has an interface association descriptor (IAD) in its firmware, Windows enumerates interface collections as though each collection were a single device and assigns a single physical device object (PDO) to each interface collection and associates hardware and compatible identifiers (IDs) with the PDO. For a detailed description of IADs, see USB Interface Association Descriptor. This section describes the hardware IDs and compatible identifiers (IDs) assigned to interface collections associated with an IAD.
In these hardware IDs,
- v(4) is the four-digit vendor code that the USB 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 bFirstInterface field of IAD.
In these compatible IDs, c(2), s(2), and p(2) contain values that are taken, respectively, from the bFunctionClass, bFunctionSubClass, and bFunctionProtocol fields of the IAD.
You cannot use IADs recursively to bind functions of functions. In particular, if a device has IAD descriptors in its firmware, the generic parent driver will not group interfaces by audio device class, as described in Enumeration of Interface Collections on Audio Devices without IADs.