I've recently implemented RawInput in my engine, and I'm using the HID functions to query the devices on the system. When I call GetRawInputBuffer and start parsing RAWINPUT packets to HID devices, I can differentiate them by the HANDLE in the RAWINPUT header.
But I can't find a way to tie this HANDLE to anything returned by the HID functions (HidD_GetPreparsedData etc.) I can get the same HANDLE by calling GetRawInputDeviceList, but I still don't have all the extra information provided by the HID functions (product name, calibration data, etc.)