Ejemplo n.º 1
0
        internal void AssignNewNativeObject(NetworkAdapter newSource)
        {
            bool dnes = Source.OperStatus == newSource.OperStatus;

            AssignNewNativeObject(newSource.Source, dnes);
        }
Ejemplo n.º 2
0
        public void Refresh()
        {
            var nad  = new Dictionary <int, NetworkAdapter>();
            var lOut = new List <NetworkAdapter>();

            var newmm = new MemPtr();

            // Get the array of unmanaged IP_ADAPTER_ADDRESSES structures
            var newads = IfDefApi.GetAdapters(ref newmm, true);

            var di    = DeviceEnum.EnumerateNetworkDevices();
            var iftab = IfTable.GetIfTable();

            foreach (var adap in newads)
            {
                var newp = new NetworkAdapter(adap);
                foreach (var de in di)
                {
                    if ((de.Description ?? "") == (adap.Description ?? "") || (de.FriendlyName ?? "") == (adap.FriendlyName ?? "") || (de.FriendlyName ?? "") == (adap.Description ?? "") || (de.Description ?? "") == (adap.FriendlyName ?? ""))
                    {
                        newp.DeviceInfo = de;

                        foreach (var iface in iftab)
                        {
                            if (newp.PhysicalAddress == iface.bPhysAddr)
                            {
                                newp.PhysIfaceInternal.Add(iface);
                            }
                        }

                        nad.Add(newp.IfIndex, newp);
                        _ = Task.Run(() => PopulateInternetStatus(newp));

                        break;
                    }
                }
            }

            if (adapters == null)
            {
                adapters = new ObservableCollection <NetworkAdapter>();
            }

            if (adapters.Count == 0)
            {
                foreach (var kv in nad)
                {
                    adapters.Add(kv.Value);
                }
            }
            else
            {
                var kseen = new List <int>();

                int c = adapters.Count - 1;
                int i;

                for (i = c; i >= 0; i--)
                {
                    if (nad.ContainsKey(adapters[i].IfIndex))
                    {
                        adapters[i].AssignNewNativeObject(nad[adapters[i].IfIndex]);
                        kseen.Add(adapters[i].IfIndex);
                    }
                    else
                    {
                        Application.Current.Dispatcher.Invoke(() =>
                        {
                            adapters.RemoveAt(i);
                        });
                    }
                }

                foreach (var kv in nad)
                {
                    if (!kseen.Contains(kv.Value.IfIndex))
                    {
                        Application.Current.Dispatcher.Invoke(() =>
                        {
                            adapters.Add(kv.Value);
                        });
                    }
                }
            }

            if (_origPtr != MemPtr.Empty)
            {
                _origPtr.Free(true);
            }

            _origPtr = newmm;

            QuickSort.Sort(adapters, new Comparison <NetworkAdapter>((a, b) => a.IfIndex - b.IfIndex));
        }