/// <summary> /// Connects to the specified wireless network. /// </summary> /// <remarks> /// The method returns immediately. Progress is reported through the <see cref="WlanNotification"/> event. /// </remarks> public void Connect(WlanConnectionMode connectionMode, Dot11BssType bssType, Dot11Ssid ssid, WlanConnectionFlags flags) { WlanConnectionParameters connectionParams = new WlanConnectionParameters(); connectionParams.wlanConnectionMode = connectionMode; connectionParams.dot11SsidPtr = Marshal.AllocHGlobal(Marshal.SizeOf(ssid)); Marshal.StructureToPtr(ssid, connectionParams.dot11SsidPtr, false); connectionParams.dot11BssType = bssType; connectionParams.flags = flags; Connect(connectionParams); Marshal.DestroyStructure(connectionParams.dot11SsidPtr, ssid.GetType()); Marshal.FreeHGlobal(connectionParams.dot11SsidPtr); }
public bool ConnectSync(WlanConnectionMode mode, string profile, PhysicalAddress[] bssids, Dot11BssType bssType, Dot11Ssid?ssid, WlanConnectionFlags flags, int timeout) { WlanConnectionParameters cp = new WlanConnectionParameters(); bool value; try { cp = CreateConnectionParameters(mode, profile, bssids, bssType, ssid, flags); value = ConnectSync(cp, timeout); } finally { DestroyConnectionParameters(cp); } return(value); }
private static WlanConnectionParameters CreateConnectionParameters(WlanConnectionMode mode, string profile, PhysicalAddress[] bssids, Dot11BssType bssType, Dot11Ssid?ssid, WlanConnectionFlags flags) { WlanConnectionParameters cp = new WlanConnectionParameters(); cp.BssType = bssType; cp.ConnectionMode = mode; cp.Flags = flags; cp.Profile = profile; Dot11BssidList bssidList = new Dot11BssidList(); if (bssids != null) { Dot11MacAddress[] macs = Util.ConvertPhysicalAddresses(bssids); bssidList = Dot11BssidList.Build(macs); cp.DesiredBssidList = Marshal.AllocHGlobal(bssidList.Header.Size); Int64 address = cp.DesiredBssidList.ToInt64(); Marshal.StructureToPtr(bssidList.Header, new IntPtr(address), false); address += Marshal.SizeOf(typeof(NdisObjectHeader)); Marshal.StructureToPtr(bssidList.ListHeader, new IntPtr(address), false); address += Marshal.SizeOf(typeof(Dot11BssidListHeader)); Int64 offset = Marshal.SizeOf(typeof(Dot11MacAddress)); for (int i = 0; i < bssidList.Entries.Length; i++) { Marshal.StructureToPtr(bssidList.Entries[i], new IntPtr(address), false); address += offset; } } if (ssid.HasValue) { cp.Ssid = Marshal.AllocHGlobal(Marshal.SizeOf(ssid.Value)); Marshal.StructureToPtr(ssid.Value, cp.Ssid, false); } return(cp); }
public void Connect(WlanConnectionMode mode, string profile, PhysicalAddress[] bssids, Dot11BssType bssType, Dot11Ssid?ssid, WlanConnectionFlags flags) { WlanConnectionParameters cp = new WlanConnectionParameters(); try { cp = CreateConnectionParameters(mode, profile, bssids, bssType, ssid, flags); Connect(cp); } finally { DestroyConnectionParameters(cp); } }