PRB: Can't Set MaxTransfer Size for USB Composite Device

ID: Q200977


The information in this article applies to:


SYMPTOMS

A WDM driver can typically set the MaximumTransferSize for a USB device via 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 4K.


CAUSE

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.


RESOLUTION

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.


STATUS

This behavior is by design.


Keywords          : kbDDK kbWinOS98 
Version           : WINDOWS:Windows 98
Platform          : WINDOWS 
Issue type        : kbprb 

Last Reviewed: March 6, 1999