/// <summary> /// Query a status of Software Access Point /// </summary> /// <returns>A construct with status of the AP</returns> public HostedNetworkStatus getStatus() { var addressList = GetListArp(); IntPtr ppStatus = IntPtr.Zero; lastErrorCode = (int)NativeWLanAPI.WlanHostedNetworkQueryStatus(handle, out ppStatus, IntPtr.Zero); checkStatusAndThrow("Could not retrive SoftAP status", false); NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS qstat = (NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS)Marshal.PtrToStructure(ppStatus, typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS)); bool isActive = qstat.HostedNetworkState == NativeWLanAPI._WLAN_HOSTED_NETWORK_STATE.wlan_hosted_network_active ? true : false; int peersConnected = (int)qstat.dwNumberOfPeers; Guid guid = qstat.IPDeviceID; string networkMac = BitConverter.ToString(qstat.wlanHostedNetworkBSSID.address);//网卡地址 LinkedList <HostedNetworkPeer> peers = new LinkedList <HostedNetworkPeer>(); IntPtr offset = Marshal.OffsetOf(typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS), "PeerList"); for (int i = 0; i < peersConnected; i++) { IntPtr ppeer = new IntPtr(ppStatus.ToInt64() + offset.ToInt64()); NativeWLanAPI._WLAN_HOSTED_NETWORK_PEER_STATE peer = (NativeWLanAPI._WLAN_HOSTED_NETWORK_PEER_STATE)Marshal.PtrToStructure(ppeer, typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_PEER_STATE)); string mac = BitConverter.ToString(peer.PeerMacAddress.address); bool authenticated = ((int)peer.PeerAuthState == 1 ? true : false); string ipAddress = addressList.LastOrDefault(x => string.Equals(x.MacAddress, mac, StringComparison.CurrentCultureIgnoreCase))?.IpAddress; HostedNetworkPeer hpeer = new HostedNetworkPeer(mac, authenticated, DnsHelper.GetHostName(ipAddress), ipAddress); peers.AddLast(hpeer); offset += Marshal.SizeOf(peer); } NativeWLanAPI.WlanFreeMemory(ppStatus); return(new HostedNetworkStatus(isActive, guid, peersConnected, peers, networkMac)); }
/// <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)); }
private string getPassword() { string pass = string.Empty; bool persistent; bool passphrase; uint length; IntPtr ppass = IntPtr.Zero; int error = (int)NativeWLanAPI.WlanHostedNetworkQuerySecondaryKey(handle, out length, out ppass, out passphrase, out persistent, out lastError, IntPtr.Zero); if (error != 0) { throw new ApplicationException("Retriving password failed!"); } else { if (length != 0 && ppass != IntPtr.Zero) { pass = Marshal.PtrToStringAnsi(ppass, (int)length); NativeWLanAPI.WlanFreeMemory(ppass); } } return(pass); }