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.
Maximum size of USB transfers
Windows 2000
Collapse this tableExpand this table
| Transfer Type | MaximumTransferSize | Error Reported |
| Control Endpoint 0 | 4 KB | USBD_STATUS_INVALID_PARAMETER |
| Control (Other Endpoints) | 64 KB | Undetermined |
| Interrupt | Undetermined | None |
| UHCI Bulk | Undetermined | None |
| OHCI Bulk | Undetermined (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
(http://support.microsoft.com/kb/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.
Collapse this tableExpand this table
| Transfer Type | MaximumTransferSize | Error Reported |
| Control Endpoint 0 | 4 KB | USBD_STATUS_INVALID_PARAMETER |
| Control (Other Endpoints) | 64 KB | Bugcheck 0xFE |
| Interrupt | Unlimited | None |
| UHCI Bulk | Unlimited | None |
| OHCI Bulk | 256K | Bugcheck 0xFE |
| EHCI Bulk | 3344K
| 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