Maximum size of USB transfers on various operating systems (832430)



The information in this article applies to:

  • Microsoft Windows Server 2003, 64-Bit Datacenter Edition
  • Microsoft Windows Server 2003, 64-Bit Enterprise Edition
  • Microsoft Windows Server 2003, Datacenter Edition
  • Microsoft Windows Server 2003, Enterprise Edition
  • Microsoft Windows Server 2003, Standard Edition
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows XP 64-Bit Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows 2000 Professional
  • 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.

MORE INFORMATION

Maximum size of USB transfers

Windows 2000

Transfer TypeMaximumTransferSizeError Reported
Control Endpoint 04 KBUSBD_STATUS_INVALID_PARAMETER
Control (Other Endpoints)64 KBUndetermined
InterruptUndeterminedNone
UHCI BulkUndeterminedNone
OHCI BulkUndetermined (see note)None
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.
Transfer TypeMaximumTransferSizeError Reported
Control Endpoint 04 KBUSBD_STATUS_INVALID_PARAMETER
Control (Other Endpoints)64 KBBugcheck 0xFE
InterruptUnlimitedNone
UHCI BulkUnlimitedNone
OHCI Bulk256KBugcheck 0xFE
EHCI Bulk3344K Bugcheck 0xFE
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

Modification Type:MajorLast Reviewed:9/8/2005
Keywords:kbinfo KB832430 kbAudDeveloper