Based on Szymon Roslowski's 3 fantastic articles on www.codeproject.com:
📎 HID USB Stack part 1
📎 HID USB Stack part 2
📎 C# USB HID Interface
My contribution/patch for UsbHid class is contained in the Addendum folder: there is a distinction between SingleDevice and SingleHID because for a composite HID, VID and PID are not enough to differentiate and select a HID, and Interface number MI is also checked.
Also DeviceDiscovery class uses UsbNotification for detecting dis/connection of the USB device.