Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

Maximum size of USB transfers on various operating systems


View products that this article applies to.

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.

↑ Back to the top


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

↑ Back to the top


Keywords: kbinfo, KB832430

↑ Back to the top

Article Info
Article ID : 832430
Revision : 4
Created on : 12/1/2007
Published on : 12/1/2007
Exists online : False
Views : 329