1. По USB такая информация не передаётся. Контроллер знает только длину принимаемых пакетов в пределах длины endpoint.
2. Есть буфер endpoint-a (например 64 байт), и регистр, из которого при завершении приёма данных можно прочитать, сколько байт было только что принято (0-64 байта).
Для сопровождения пакетов более подробной информацией, используются протоколы верхнего уровня.
Например для Mass Storage Device (флешки, HDD, CD-ROM и проч.), через endpoint-ы 1-7 (IN и OUT) - "гоняется" протокол SCSI. С помощью этого протокола пересылаются блоки данных, каждый из которых "обрамлён" вначале и в конце специальными полями CBW и CSW, по которым можно заранее узнать длину каждого такого блока, и достоверно определить завершение его приёма-передачи.
Пример, "
Mass Storage Class, Bulk-Only Transport"
USB MSC BulkНо и в этом случае, из заголовков CBW можно узнать только длину отдельных блоков, но не общую длину файла, которая известна только операционной системе.
Например из флешки читается тело MP3 файла, размер которого 10 Мбайт, но делается это блоками по 4096 байт каждый. В заголовках CBW будет сообщаться что блоки по 4096 байт. Но сколько таких блоков, и какова общая длина файла - знает только операционная система, которая заранее прочитала заголовок файла в корневом каталоге флешки