You can use SetupDiGetDeviceRegistryProperty with the argument SPDRP_SERVICE to get the name of the driver installed for the node device. The driver name usually indicates what type of device is connected if it uses the standard driver that is part of Windows. You can also use the SPDRP_COMPATIBLEIDS view, which are identifiers that are used to select these standard drivers. In fact, SPDRP_CLASS and SPDRP_CLASSGUID may be the best; I think that one of them corresponds to the category in which the device is displayed in the device manager.
It looks like your devices are composite devices, so you will need to access the children of the composite device, and not the composite device itself. One way to do this is to call SetupDiGetClassDevs(NULL, "USB", NULL, 0) , which will return a set of information about the device in which there are all USB devices and all their children.
source share