private void ReloadInterfaces() { IntPtr listPtr; Util.ThrowIfError( NativeMethods.WlanEnumInterfaces(clientHandle, IntPtr.Zero, out listPtr)); try { WlanInterfaceInfoList list = (WlanInterfaceInfoList)Marshal.PtrToStructure(listPtr, typeof(WlanInterfaceInfoList)); uint numberOfItems = list.NumberOfItems; Int64 listIterator = listPtr.ToInt64() + Marshal.OffsetOf(typeof(WlanInterfaceInfoList), "InterfaceInfo").ToInt64(); WlanInterface[] interfaces = new WlanInterface[numberOfItems]; List <Guid> currentIfaceGuids = new List <Guid>(); for (int i = 0; i < numberOfItems; i++) { WlanInterfaceInfo info = (WlanInterfaceInfo)Marshal.PtrToStructure(new IntPtr(listIterator), typeof(WlanInterfaceInfo)); listIterator += Marshal.SizeOf(info); WlanInterface wlanInterface; currentIfaceGuids.Add(info.Guid); if (interfaceMap.ContainsKey(info.Guid)) { wlanInterface = interfaceMap[info.Guid]; //wlanInterface.UpdateInfo(info); } else { wlanInterface = WlanInterface.CreateInterface(this, info); } interfaces[i] = wlanInterface; interfaceMap[info.Guid] = wlanInterface; } // Remove stale interfaceList Queue <Guid> deadIfacesGuids = new Queue <Guid>(); foreach (Guid ifaceGuid in interfaceMap.Keys) { if (!currentIfaceGuids.Contains(ifaceGuid)) { deadIfacesGuids.Enqueue(ifaceGuid); } } while (deadIfacesGuids.Count != 0) { Guid deadIfaceGuid = deadIfacesGuids.Dequeue(); interfaceMap.Remove(deadIfaceGuid); } interfaceList = interfaces; } finally { NativeMethods.WlanFreeMemory(listPtr); } }
internal WlanInterface(WlanClient client, WlanInterfaceInfo info) { this.client = client; this.info = info; }
// CONSTRUCTORS =========================================================== private WlanInterface(WlanClient client, WlanInterfaceInfo info) { this.client = client; Guid = info.Guid; //UpdateInfo(info); }
/// <summary> /// Creates an instance of an interface control class. /// </summary> /// <param name="client">Native Wi-Fi client control class.</param> /// <param name="info">Interface information provided by client control class.</param> /// <returns>Instance of an interface control class.</returns> public static WlanInterface CreateInterface(WlanClient client, WlanInterfaceInfo info) { WlanInterface intf = new WlanInterface(client, info); return(intf); }
internal WlanInterface(SystemInterface fclient, WlanInterfaceInfo finfo) { client = fclient; info = finfo; }