internal static IEnumerable <object> GetDevicePropertyKeys(IntPtr deviceInfoSet, object deviceInfoData) { var devInfo = (SP_DEVINFO_DATA)deviceInfoData; var keys = new DEVPROPKEY[1]; uint requiredPropertyKeyCount; if (!NativeMethods.SetupDiGetDevicePropertyKeys(deviceInfoSet, ref devInfo, ref keys[0], (uint)keys.Length, out requiredPropertyKeyCount, 0)) { if (Marshal.GetLastWin32Error() == ERROR_INSUFFICIENT_BUFFER) { keys = new DEVPROPKEY[requiredPropertyKeyCount]; if (NativeMethods.SetupDiGetDevicePropertyKeys(deviceInfoSet, ref devInfo, ref keys[0], (uint)keys.Length, out requiredPropertyKeyCount, 0)) { return(keys.Cast <object>()); // .Select(k => (object)k); } else { throw new System.ComponentModel.Win32Exception(); } } else { throw new System.ComponentModel.Win32Exception(); } } return(null); }