I used raw HID protocol in my USB connected device. This worked on all versions of Windows. Granted it is not suitable for every need but worked just fine for my case.
It is especially not suitable for adb, one of the primary use cases of which is pushing a multi-gigabyte system image to the device. You can get 200+ MB/s of real-life throughput with bulk transfers, whereas the theoretical limit of HID is what, 64 kB per millisecond?