PRB: You cannot set MaximumTransferSize for a USB composite device

This article was previously published under Q200977
This article has been archived. It is offered "as is" and will no longer be updated.
A WDM driver can typically set the MaximumTransferSize for a USB device by means of the URB_FUNCTION_SELECT_CONFIGURATION function. However, attempts to use URB_FUNCTION_SELECT_CONFIGURATION to set the MaximumTransferSize for the endpoints of a function on a composite USB device will fail.

The maximum transfer size for the endpoints is still set to the default value of 4 kilobytes (KB).
When Usbhub.sys is loaded as the parent driver for a composite USB device, it selects alternate interface 0 (zero) for each interface on the device before it enumerates each child function. When the WDM driver that is loaded for a specific child function subsequently tries to use URB_FUNCTION_SELECT_CONFIGURATION and specifies alternate interface 0 with a non-default maximum transfer size, Usbhub.sys intercepts the request and returns success without passing the request to the device, because it believes alternate interface 0 is already selected and there is no need to reselect the interface. This results in the maximum transfer size not getting changed for the device.
A WDM driver loaded for a function of a composite USB device can use URB_FUNCTION_SELECT_INTERFACE to select alternate interface 0 after it uses URB_FUNCTION_SELECT_CONFIGURATION to select the configuration. This has the effect of setting the MaximumTransferSize to the value specified by the WDM driver.
This behavior is by design.

Article ID: 200977 - Last Review: 01/09/2015 15:55:36 - Revision: 2.0

  • Microsoft Win32 Device Driver Kit for Windows 2000
  • kbnosurvey kbarchive kbprb KB200977