public void Delete()
        {
            if (ToDeleteInterfaces.Count != 0)
            {
                foreach (var interfaceProfile in ToDeleteInterfaces)
                {
                    DeleteInterfaceProfiles(interfaceProfile);
                    InterfaceProfiles.Remove(interfaceProfile);
                }
            }

            UpdateInterfaceProfileListKey();

            if (ToDeleteNetworks.Count != 0)
            {
                foreach (var networkProfile in ToDeleteNetworks)
                {
                    DeleteNetworkProfiles(networkProfile);
                    NetworkProfiles.Remove(networkProfile);
                }
            }

            // Clear trackers
            ToDeleteInterfaces.Clear();
            ToDeleteNetworks.Clear();
        }
        private void UpdateInterfaceProfileListKey()
        {
            try
            {
                var registry = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, SixtyFourBitChecked ? RegistryView.Registry64 : RegistryView.Registry32);
                var grouped  = InterfaceProfiles.GroupBy(i => i.InterfaceGuid, p => p.ProfileGuid,
                                                         (key, g) => new { InterfaceGuid = key, ProfileGuids = g.ToList() });
                foreach (var g in grouped)
                {
                    var profile = registry.OpenSubKey(@"SOFTWARE\Microsoft\WlanSvc\Interfaces\" + g.InterfaceGuid, true);
                    if (profile != null)
                    {
                        profile.SetValue("ProfileList", g.ProfileGuids.ToArray());
                    }
                }

                registry.Close();
            }
            catch (Exception ex)
            {
                if (ex is SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(ex.Message + " Please run as administrator.", "Admin rights required");
                }
                if (ex is ArgumentException || ex is NullReferenceException)
                {
                    MessageBox.Show(ex.Message, "Could not find registry key");
                }
            }
        }
        public void LoadAll()
        {
            // Clear collections so no duplicate
            InterfaceProfiles.Clear();
            NetworkProfiles.Clear();
            ToDeleteInterfaces.Clear();
            ToDeleteNetworks.Clear();

            // Load all interfaces
            GetInterfaces();
            GetNetworks();
        }
        public void GetInterfaces()
        {
            try
            {
                var registry   = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, SixtyFourBitChecked ? RegistryView.Registry64 : RegistryView.Registry32);
                var interfaces = registry.OpenSubKey(@"SOFTWARE\Microsoft\WlanSvc\Interfaces\");

                if (interfaces == null)
                {
                    return;
                }

                foreach (var subkey in interfaces.GetSubKeyNames())
                {
                    var profile = interfaces.OpenSubKey(subkey);
                    if (profile == null)
                    {
                        continue;
                    }

                    var items = (string[])profile.GetValue("ProfileList");
                    if (items == null)
                    {
                        continue;
                    }

                    foreach (var interfaceProfile in items.Select(item => GetInterfaceMetadata(subkey, item)).Where(interfaceProfile => interfaceProfile != null))
                    {
                        InterfaceProfiles.Add(interfaceProfile);
                    }

                    profile.Close();
                }

                registry.Close();
                interfaces.Close();
            }
            catch (Exception ex)
            {
                if (ex is SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(ex.Message + " Please run as administrator.", "Admin rights required");
                }
                if (ex is ArgumentException || ex is NullReferenceException)
                {
                    MessageBox.Show(ex.Message, "Could not find registry key");
                }
            }
        }