private void setNetworkSettings(string ssid, int maxPeers) { NativeWLanAPI._DOT11_SSID ossid = new NativeWLanAPI._DOT11_SSID(); NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS settings = new NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS(); if (ssid.Length > 32) { throw new ArgumentException("Wi-Fi名称必须小于32个字符"); } else { ossid.uSSIDLength = (uint)ssid.Length; ossid.ucSSID = ssid; settings.hostedNetworkSSID = ossid; } if (maxPeers == 0) { throw new ArgumentException("Max number of peers must be greater than 0"); } settings.dwMaxNumberOfPeers = (uint)maxPeers; int size = Marshal.SizeOf(settings); IntPtr pSettings = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(settings, pSettings, true); NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE opcode = NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE._WLAN_HOSTED_NETWORK_OPCODE_connection_settings; NativeWLanAPI.WlanHostedNetworkSetProperty(handle, opcode, (uint)size, pSettings, out lastError, IntPtr.Zero); checkStatusAndThrow("设置Wi-Fi名称失败"); Marshal.FreeHGlobal(pSettings); }
/// <summary> /// Enables the Software AP. Sometimes when Start() won't work, Enable() and then Start() might work. /// </summary> public void Enable() { NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE opcode = NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE._WLAN_HOSTED_NETWORK_OPCODE_enable; int size = Marshal.SizeOf(new Int32()); IntPtr setting = Marshal.AllocHGlobal(size); Marshal.WriteInt32(setting, 1); lastErrorCode = (int)NativeWLanAPI.WlanHostedNetworkSetProperty(handle, opcode, (uint)size, setting, out lastError, IntPtr.Zero); Marshal.FreeHGlobal(setting); checkStatusAndThrow("Could not enable Hosted Access Point! "); }
/// <summary> /// Queries the settings of Software Access Point /// </summary> /// <returns>Current settings of the AP</returns> public HostedNetworkSettings getSettings() { UInt32 pdwDataSize = new UInt32(); IntPtr ppvData = IntPtr.Zero; NativeWLanAPI._WLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType = new NativeWLanAPI._WLAN_OPCODE_VALUE_TYPE(); NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE opcode = NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE._WLAN_HOSTED_NETWORK_OPCODE_connection_settings; lastErrorCode = (int)NativeWLanAPI.WlanHostedNetworkQueryProperty(handle, opcode, out pdwDataSize, out ppvData, out pWlanOpcodeValueType, IntPtr.Zero); checkStatusAndThrow("Could not get network settings at this time"); NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS qsettings = (NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS)Marshal.PtrToStructure(ppvData, typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS)); int maxPeers = (int)qsettings.dwMaxNumberOfPeers; string ssid = qsettings.hostedNetworkSSID.ucSSID; string password = getPassword(); NativeWLanAPI.WlanFreeMemory(ppvData); return(new HostedNetworkSettings(ssid, password, maxPeers)); }