USB MIDI SysEx Messages Split After Windows Updates KB5077181/KB5074105
Problem Description
Our USB MIDI device communicates with our software via MIDI System Exclusive (SysEx) messages. After installing Windows updates KB5077181 and KB5074105, we encountered a critical issue.
Device Configuration
- Our device's endpoint maximum packet size (
wMaxPacketSize) is set to 512 bytes during enumeration - Our host application ensures each packet does not exceed 512 bytes
- Each packet contains a complete SysEx frame with header (
0xF0) and footer (0xF7) - On the device side, we assume each USB packet received is complete
- This logic has worked reliably for several years on both Windows and macOS
Issue After Windows Updates
After installing KB5077181 and KB5074105, single packets sent from our host application may be split into multiple smaller packets, causing our device to fail detecting complete frame headers and footers, triggering error handling.
Example: A 192-byte packet sent via midiOutLongMsg may be split into two packets (e.g., 144 bytes + 48bytes). While these packets form a complete message when combined, our device firmware does not reassemble them and treats them as invalid packets. (This can be verified using BusHound)
Workarounds Attempted
| Attempt | Result |
|---|---|
| Reduce packet size to 32 bytes (minimum our protocol accepts) | Still split (e.g., 20 + 12 bytes) |
| Add 50ms delay between packets | Issue persists |
| Run application in compatibility mode | Issue persists |
| Uninstall KB5077181/KB5074105 | Works normally (no splitting) |
Constraints
- We cannot require end users to uninstall Windows updates
- Existing deployed devices cannot receive firmware updates
Questions
- Is there a new API that ensures MIDI SysEx messages (within USB endpoint max packet size) are not split?
- Are there any configurations that prevent packet splitting while still using
midiOutLongMsg? - Are there any alternative solutions you would recommend?
Environment
- OS: Windows (after KB5077181/KB5074105)
- API:
midiOutLongMsg(Windows multimedia API) - Device: USB MIDI Class Compliant Device
- Endpoint Max Packet Size: 512 bytes