/// <summary> /// Queries WMI for Bluetooth COM Ports. Provides useful information on the Console as it does. /// </summary> /// <returns></returns> private ManagementObject[] getWmiCOMData() { ManagementObject[] wmiObjects = null; ManagementObjectSearcher wmiSearcher = null; try { wmiSearcher = new ManagementObjectSearcher(@"select DeviceID,PNPDeviceID from Win32_SerialPort"); ManagementObjectCollection tmpSearchResults = null; Logger.Info("Searching for Bluetooth COM devices"); wmiSearcher = new ManagementObjectSearcher(@"root\cimv2", "SELECT Name,DeviceID,PNPDeviceID FROM Win32_SerialPort WHERE Name LIKE \"%Bluetooth%\""); tmpSearchResults = wmiSearcher.Get(); Logger.Info("Found {0} devices, verifying...", tmpSearchResults.Count); wmiObjects = new ManagementObject[tmpSearchResults.Count]; tmpSearchResults.CopyTo(wmiObjects, 0); } catch (System.Management.ManagementException e) { Console.WriteLine("Query " + wmiSearcher.Query.ToString() + " threw an exception!\n"); throw e; } try { int i = 0; foreach (ManagementObject obj in wmiObjects) { if ((obj["Name"] as String).Contains("Bluetooth") == false) { Logger.Warning("{0} is not a Bluetooth device! Removing from search results", obj["DeviceID"] as String); } else { wmiObjects[i] = obj; ++i; } } } catch (System.Management.ManagementException e) { Console.WriteLine("Exception: Unable to read a property from wmi object!\n"); throw e; } /* Extremeley self-referencing code to get rid of WMI-detected COM ports that * have a MAC address of 000000000000 */ wmiObjects = wmiObjects.Where(obj => (obj["PNPDeviceID"] as String).Substring( (obj["PNPDeviceID"] as String).LastIndexOf('_') - MAC_ADDRESS_LENGTH, MAC_ADDRESS_LENGTH) != "000000000000").ToArray(); Logger.Info("Verified {0} Bluetooth COM Device(s)", wmiObjects.Length); return wmiObjects; }