diff --git a/UsbDk/Urb.cpp b/UsbDk/Urb.cpp index baabc50..ecbd9d0 100644 --- a/UsbDk/Urb.cpp +++ b/UsbDk/Urb.cpp @@ -71,5 +71,16 @@ NTSTATUS CIsochronousUrb::Create(Direction TransferDirection, PVOID TransferBuff m_Urb->UrbIsochronousTransfer.TransferBuffer = TransferBuffer; m_Urb->UrbIsochronousTransfer.NumberOfPackets = static_cast(NumberOfPackets); + + if (TransferDirection == URB_DIRECTION_OUT) + { + // initialize Length with initial packet length + // USB controller driver may override it (Win7) + for (size_t i = 0; i < NumberOfPackets; i++) + { + m_Urb->UrbIsochronousTransfer.IsoPacket[i].Length = static_cast(PacketSizes[i]); + } + } + return FillOffsetsArray(NumberOfPackets, PacketSizes, TransferBufferSize); }