Эта страшная функция GetRawInputDeviceList.
Функцию GetRawInputDeviceList можно смело приводить в качестве антипримера правильно спроектированного API. Эта функция используется для получения списка описателей устройств ввода (raw input devices). Ничего сложного. Прототип функции тоже выглядит довольно невинно – всего три параметра, и, как кажется по началу, назначение каждого довольно очевидно.
UINT GetRawInputDeviceList(
__out_opt PRAWINPUTDEVICELIST pRawInputDeviceList,
__inout PUINT puiNumDevices,
__in UINT cbSize
);