Microsoft KB Archive/832430

= Maximum size of USB transfers on various operating systems =

Article ID: 832430

Article Last Modified on 12/1/2007

-

APPLIES TO


 * Microsoft Windows Server 2003, 64-Bit Datacenter Edition
 * Microsoft Windows Server 2003, Enterprise x64 Edition
 * Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
 * Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
 * Microsoft Windows Server 2003, Standard Edition (32-bit x86)
 * Microsoft Windows Server 2003, Web Edition
 * Microsoft Windows XP Professional x64 Edition
 * Microsoft Windows XP Home Edition
 * Microsoft Windows XP Professional
 * Microsoft Windows 2000 Advanced Server
 * Microsoft Windows 2000 Datacenter Server
 * Microsoft Windows 2000 Professional Edition
 * Microsoft Windows 2000 Server

-



SUMMARY
This article describes the maximum size of USB transfers on various Microsoft Windows operating systems.

Microsoft Windows 2000
On Microsoft Windows 2000, the maximum size of a USB transfer is determined by the device driver that is loaded for the USB device. The maximum size of USB transfers is determined in one of the following ways:
 * When the device driver selects the configuration of the device by means of the URB_FUNCTION_SELECT_CONFIGURATION function.
 * When the device driver selects an alternative interface for the device by means of the URB_FUNCTION_SELECT_INTERFACE function.

In most cases, a USB transfer on Windows 2000 has no hard-coded size limit except the limit that is defined by the client driver.

Microsoft Windows XP and Microsoft Windows Server 2003
On both Microsoft Windows XP and Microsoft Windows Server 2003, the maximum size of a USB transfer is defined by the miniport driver of the USB host controller or by the USB port driver (Usbport.sys). (The maximum size of a USB transfer is not defined by the client driver of the device.) If you use more than the maximum size of a USB transfer, the transfer request may fail, or a stop error may appear on a blue-screen.

On Windows XP and Windows Server 2003, when the maximum size of a transfer for a bulk endpoint is either less than 4 kilobytes (KB) or equal to 4 KB, the port driver splits the transaction into multiple transfers. Theoretically, this behavior makes the maximum size of a USB transfer unlimited for these endpoints. However, Microsoft has not tested very large transfers, and Microsoft does not recommend very large transfers.

Note On Windows XP and Windows Server 2003, the maximum size of USB transfers is not currently propagated to the client driver. This behavior may change in future versions of Windows.



Windows 2000
Note the following about transfers on Windows 2000:  If you use more than the limit of 255 packets per USB request block (URB) on full-speed isochronous endpoints, you may receive the following error message:

USBD_STATUS_INVALID_PARAMETER

 When you write a driver, be aware of performance and resource trade-offs when you use large transfers. Microsoft does not recommend very large bulk transfers or interrupt transfers because of resource limitations that are exposed by the Open Host Controller Interface (OHCI) driver. Requests on the default control endpoint are limited to 4 KB for compatibility with earlier versions of drivers. The USB specification limits other control transfers to 64 KB. However, there is no specific limitation in the USB driver stack for non-control endpoints. The results of specifying a transfer that is larger than 64 KB on a non-control endpoint are undefined. Composite devices on Windows 2000 have a maximum transfer size of 4 KB when you use the URB_FUNCTION_SELECT_CONFIGURATION function to set the maximum size of a transfer. To work around this limitation, drivers must use the URB_FUNCTION_SELECT_INTERFACE function. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

200977 You cannot set MaximumTransferSize for a USB composite device



Windows XP and Windows Server 2003
The following table represents theoretical limits; this table does not represent practical limits.

Note Microsoft does not recommend very large transfers.

Full-speed isochronous endpoints are limited to 255 packets per URB. High-speed isochronous endpoints are limited to 1024 packets per URB. If you use more than these limits, you will receive the following USBD error:

USBD_STATUS_INVALID_PARAMETER

Additional query words: excessive exceed huge

Keywords: kbinfo KB832430

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.