Seems like the method for getting buffer sizes for Usb on Windows is wrong.
The buffer length must be a multiple of the maximum endpoint packet size.
The length must be less than or equal to the value of MAXIMUM_TRANSFER_SIZE retrieved by WinUsb_GetPipePolicy.
There are no restrictions on the size of the buffer if RAW_IO is not set as the pipe's policy type. If the size of the buffer is greater than the maximum transfer length reported by MAXIMUM_TRANSFER_SIZE, WinUSB divides the request into smaller requests and submits them serially to the host controller.
Seems like the method for getting buffer sizes for Usb on Windows is wrong.
https://docs.microsoft.com/en-us/windows/desktop/api/winusb/nf-winusb-winusb_writepipe#remarks
Raised here: https://github.com/MelbourneDeveloper/Device.Net/issues/67#issuecomment-507046234