Question: Is there any reason for the IOCTL_EZUSB_BULK_READ, used in the ezusb.sys general purpose driver to transfer blocks less than or equal to 64K each time? If I want to transfer, say, 2 MB in just one call, what changes would I have to make in the driver source code (ezusbsys.c) in order to make it work?
Search for the string "MaximumTransferSize" to find the two locations in "ezusbsys.c" where this value is defined. Cypress chose 64K as a convenient multiple of the maximum size of a bulk transfer data packet (512 bytes) as defined in the USB 2.0 Specification. The USB host stack may also limit each URB to be only 64K long.