コード例 #1
0
        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);
            }
        }
コード例 #2
0
 internal WlanInterface(WlanClient client, WlanInterfaceInfo info)
 {
     this.client = client;
     this.info   = info;
 }
コード例 #3
0
        // CONSTRUCTORS ===========================================================

        private WlanInterface(WlanClient client, WlanInterfaceInfo info)
        {
            this.client = client;
            Guid        = info.Guid;
            //UpdateInfo(info);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 internal WlanInterface(SystemInterface fclient, WlanInterfaceInfo finfo)
 {
     client = fclient;
     info   = finfo;
 }