Je recommanderais de regarder l'exemple USBView dans le WDK. Si vous n'êtes pas familier avec cela, lancez-le simplement - cet outil parcourt l'ensemble de l'arbre USB sur le système et imprime des informations et des listes de descripteurs pour chaque périphérique.
Dans votre cas, je commencerais par la fonction RefreshTree() de cet exemple, vous pouvez ensuite suivre le code pour voir comment il énumère les contrôleurs hôtes, les concentrateurs et enfin les périphériques. Pour chaque périphérique que vous trouvez, vous pouvez regarder le bInterfaceClass dans les descripteurs d'interface pour savoir quels types d'interfaces il annonce (dans votre cas 0x03 pour la Classe d'Interface HID et 0x08 pour la Classe de Stockage de Masse).
Le moyen le plus simple d'obtenir le code source de cet exemple est d'installer le WDK 7.1.0 qui est actuellement disponible ici : http://www.microsoft.com/en-us/download/details.aspx?id=11800