public void Connect(string Bssid, string ProfileName) { byte[] desBssid = Bssid.Split(':').Select(x => Convert.ToByte(x, 16)).ToArray(); Wlan.NDIS_OBJECT_HEADER ndoh; ndoh.Type = Wlan.NDIS_OBJECT_TYPE_DEFAULT; ndoh.Revision = Wlan.DOT11_BSSID_LIST_REVISION_1; ndoh.Size = (ushort)System.Runtime.InteropServices.Marshal.SizeOf(typeof(Wlan.DOT11_BSSID_LIST)); Wlan.DOT11_BSSID_LIST desBssidList = new Wlan.DOT11_BSSID_LIST(); desBssidList.Header = ndoh; desBssidList.uNumOfEntries = 1; desBssidList.uTotalNumOfEntries = 1; Wlan.DOT11_MAC_ADDRESS bssid = new Wlan.DOT11_MAC_ADDRESS(); bssid.Dot11MacAddress = desBssid; desBssidList.BSSIDs = new Wlan.DOT11_MAC_ADDRESS[1]; desBssidList.BSSIDs[0] = bssid; IntPtr desBssidListPtr = Marshal.AllocHGlobal(Marshal.SizeOf(desBssidList)); Marshal.StructureToPtr(desBssidList, desBssidListPtr, false); Wlan.DOT11_SSID dot11Ssid = new Wlan.DOT11_SSID(); dot11Ssid.ucSSID = ProfileName; dot11Ssid.uSSIDLength = (uint)dot11Ssid.ucSSID.Length; IntPtr dot11SsidPtr = Marshal.AllocHGlobal(Marshal.SizeOf(dot11Ssid)); Marshal.StructureToPtr(dot11Ssid, dot11SsidPtr, false); string profileXml = GetProfileXml(ProfileName); SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true); Wlan.WlanConnectionParameters connectionParams = new Wlan.WlanConnectionParameters(); connectionParams.wlanConnectionMode = Wlan.WlanConnectionMode.Profile; connectionParams.profile = ProfileName; connectionParams.dot11SsidPtr = dot11SsidPtr; connectionParams.dot11BssType = Wlan.Dot11BssType.Any; connectionParams.flags = 0; connectionParams.desiredBssidListPtr = desBssidListPtr; Connect(connectionParams); }
public void Connect(string Bssid, string Ssid, string Pwd) { byte[] desBssid = Bssid.Split(':').Select(x => Convert.ToByte(x, 16)).ToArray(); Wlan.NDIS_OBJECT_HEADER ndoh; ndoh.Type = Wlan.NDIS_OBJECT_TYPE_DEFAULT; ndoh.Revision = Wlan.DOT11_BSSID_LIST_REVISION_1; ndoh.Size = (ushort)System.Runtime.InteropServices.Marshal.SizeOf(typeof(Wlan.DOT11_BSSID_LIST)); Wlan.DOT11_BSSID_LIST desBssidList = new Wlan.DOT11_BSSID_LIST(); desBssidList.Header = ndoh; desBssidList.uNumOfEntries = 1; desBssidList.uTotalNumOfEntries = 1; Wlan.DOT11_MAC_ADDRESS bssid = new Wlan.DOT11_MAC_ADDRESS(); bssid.Dot11MacAddress = desBssid; desBssidList.BSSIDs = new Wlan.DOT11_MAC_ADDRESS[1]; desBssidList.BSSIDs[0] = bssid; IntPtr desBssidListPtr = Marshal.AllocHGlobal(Marshal.SizeOf(desBssidList)); Marshal.StructureToPtr(desBssidList, desBssidListPtr, false); Wlan.DOT11_SSID dot11Ssid = new Wlan.DOT11_SSID(); dot11Ssid.ucSSID = Ssid; dot11Ssid.uSSIDLength = (uint)dot11Ssid.ucSSID.Length; IntPtr dot11SsidPtr = Marshal.AllocHGlobal(Marshal.SizeOf(dot11Ssid)); Marshal.StructureToPtr(dot11Ssid, dot11SsidPtr, false); string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><connectionMode>auto</connectionMode><MSM><security><authEncryption><authentication>WPA2PSK</authentication><encryption>AES</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>passPhrase</keyType><protected>false</protected><keyMaterial>{1}</keyMaterial></sharedKey></security></MSM></WLANProfile>", Ssid, Pwd); SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true); Wlan.WlanConnectionParameters connectionParams = new Wlan.WlanConnectionParameters(); connectionParams.wlanConnectionMode = Wlan.WlanConnectionMode.Profile; connectionParams.profile = Ssid; connectionParams.dot11SsidPtr = dot11SsidPtr; connectionParams.dot11BssType = Wlan.Dot11BssType.Any; connectionParams.flags = 0; connectionParams.desiredBssidListPtr = desBssidListPtr; Connect(connectionParams); }