It's been a long time since I've worked in a Windows environment, but I would suggest that you look at
using WMI.
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_PnPEntity");
ManagementObjectCollection coll = searcher.Get();
foreach (ManagementObject any in coll)
{
}