public void SetHostedNetworkName(string name) { Logger.Trace("SetHostedNetworkName: New value: {0}", name); const int dot11SSIDMaxLength = 32; var nameLength = Encoding.ASCII.GetByteCount(name); Logger.Info("SetHostedNetworkName: The default encoding character count of {0} is {1}", name, nameLength); if (nameLength > dot11SSIDMaxLength) { Logger.Error("SetHostedNetworkName: The length of name should be less than 32. Ignore it..."); throw new ArgumentOutOfRangeException("name", "Character count should be less than 32"); } var newSettings = new WlanHostedNetworkConnectionSettings { HostedNetworkSSID = new Dot11SSID { SSID = name, SSIDLength = (uint)Encoding.Default.GetByteCount(name) }, MaxNumberOfPeers = this._connectionSettings.MaxNumberOfPeers }; WlanHostedNetworkReason faileReason; var newSettingPtr = Marshal.AllocHGlobal(Marshal.SizeOf(newSettings)); Marshal.StructureToPtr(newSettings, newSettingPtr, false); Logger.Trace("SetHostedNetworkName: New Setting: {0x16}", newSettingPtr.ToInt64()); Utilities.ThrowOnError( NativeMethods.WlanHostedNetworkSetProperty( this._wlanHandle, WlanHostedNetworkOpcode.ConnectionSettings, (uint)Marshal.SizeOf(newSettings), newSettingPtr, out faileReason, IntPtr.Zero)); Logger.Trace("SetHostedNetworkName: WlanHostedNetworkSetProperty invoked without error"); this._connectionSettings = newSettings; }
public HostedNetworkManager() { var enabled = IntPtr.Zero; var connectionSettings = IntPtr.Zero; var securitySettings = IntPtr.Zero; var status = IntPtr.Zero; try { Logger.Trace(".ctor: Start invoking native codes..."); Lock(); uint negotiatedVersion; WlanHandle clientHandle; Logger.Trace(".ctor: Invoking WlanOpenHandle..."); var returnValue = NativeMethods.WlanOpenHandle( WlanApiVersion.Version, IntPtr.Zero, out negotiatedVersion, out clientHandle); Logger.Trace(".ctor: WlanOpenHandle returned {0}", returnValue); Utilities.ThrowOnError(returnValue); if (negotiatedVersion != (uint) WlanApiVersion.Version) { Logger.Error(".ctor: Wlan API version negotiation failed"); throw new WlanException("Wlan API version negotiation failed"); } Logger.Trace(".ctor: _wlanHandle: {0:x16}", clientHandle.DangerousGetHandle().ToInt64()); this._wlanHandle = clientHandle; WlanNotificationSource previousNotificationSource; Logger.Trace(".ctor: Invoking WlanRegisterNotification..."); returnValue = NativeMethods.WlanRegisterNotification( clientHandle, WlanNotificationSource.HostedNetwork, true, OnNotification, IntPtr.Zero, IntPtr.Zero, out previousNotificationSource); Logger.Trace(".ctor: WlanRegisterNotification returned {0}", returnValue); Utilities.ThrowOnError(returnValue); WlanHostedNetworkReason faileReason; Logger.Trace(".ctor: Invoking WlanHostedNetworkInitSettings..."); returnValue = NativeMethods.WlanHostedNetworkInitSettings( clientHandle, out faileReason, IntPtr.Zero); Logger.Trace(".ctor: WlanHostedNetworkInitSettings returned {0}", returnValue); Utilities.ThrowOnError(returnValue); uint dataSize; WlanOpcodeValueType opcodeValueType; Logger.Trace(".ctor: Invoking WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.Enable..."); returnValue = NativeMethods.WlanHostedNetworkQueryProperty( clientHandle, WlanHostedNetworkOpcode.Enable, out dataSize, out enabled, out opcodeValueType, IntPtr.Zero); Logger.Trace(".ctor: WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.Enable returned {0}", returnValue); Utilities.ThrowOnError(returnValue); this.IsHostedNetworkAllowed = Convert.ToBoolean(Marshal.ReadInt32(enabled)); Logger.Info(".ctor: IsHostedNetworkAllowed: {0}", this.IsHostedNetworkAllowed); Logger.Trace( ".ctor: Invoking WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.ConnectionSettings..."); returnValue = NativeMethods.WlanHostedNetworkQueryProperty( clientHandle, WlanHostedNetworkOpcode.ConnectionSettings, out dataSize, out connectionSettings, out opcodeValueType, IntPtr.Zero); Utilities.ThrowOnError(returnValue); Logger.Trace( ".ctor: WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.ConnectionSettings returned {0}", returnValue); if (connectionSettings == IntPtr.Zero || Marshal.SizeOf(typeof (WlanHostedNetworkConnectionSettings)) < dataSize) { Logger.Error(".ctor: Got invalid connection setting data"); Utilities.ThrowOnError(13); } this._connectionSettings = (WlanHostedNetworkConnectionSettings) Marshal.PtrToStructure(connectionSettings, typeof (WlanHostedNetworkConnectionSettings)); Logger.Info(".ctor: Connection setting: SSID: {0}, max peer count: {1}", this._connectionSettings.HostedNetworkSSID.SSID, this._connectionSettings.MaxNumberOfPeers); Logger.Trace( ".ctor: Invoking WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.SecuritySettings..."); returnValue = NativeMethods.WlanHostedNetworkQueryProperty( clientHandle, WlanHostedNetworkOpcode.SecuritySettings, out dataSize, out securitySettings, out opcodeValueType, IntPtr.Zero); Logger.Trace( ".ctor: WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.ConnectionSettings returned {0}", returnValue); if (securitySettings == IntPtr.Zero || Marshal.SizeOf(typeof (WlanHostedNetworkSecuritySettings)) < dataSize) { Logger.Error(".ctor: Got invalid security setting data"); Utilities.ThrowOnError(13); } this._securitySettings = (WlanHostedNetworkSecuritySettings) Marshal.PtrToStructure(securitySettings, typeof (WlanHostedNetworkSecuritySettings)); Logger.Info(".ctor: Security setting: Authentication algorithm: {0}, cipher algorithm: {1}", this._securitySettings.Dot11AuthAlgo, this._securitySettings.Dot11CipherAlgo); Logger.Trace(".ctor: Invoking WlanHostedNetworkQueryStatus..."); returnValue = NativeMethods.WlanHostedNetworkQueryStatus( clientHandle, out status, IntPtr.Zero); Logger.Trace(".ctor: WlanHostedNetworkQueryStatus returned {0}", returnValue); Utilities.ThrowOnError(returnValue); var wlanHostedNetworkStatus = (WlanHostedNetworkStatus) Marshal.PtrToStructure(status, typeof (WlanHostedNetworkStatus)); _hostedNetworkInterfaceGuid = wlanHostedNetworkStatus.IPDeviceID; _hostedNetworkState = wlanHostedNetworkStatus.HostedNetworkState; Logger.Info( ".ctor: Hosted network status: State: {0}, BSSID: {1}, physical type: {2}, channel frequency: {3}, current number of peers: {4}", wlanHostedNetworkStatus.HostedNetworkState, BitConverter.ToString(wlanHostedNetworkStatus.WlanHostedNetworkBSSID), wlanHostedNetworkStatus.Dot11PhyType, wlanHostedNetworkStatus.ChannelFrequency, wlanHostedNetworkStatus.NumberOfPeers); _icsManager = new ICSManager(); Logger.Trace(".ctor: ICSManager initialized "); } catch (ICSException) { Logger.Trace(".ctor: ICSManager is invalid"); } catch (Win32Exception) { if (!this._wlanHandle.IsInvalid) { this._wlanHandle.Dispose(); } throw; } finally { Unlock(); if (enabled != IntPtr.Zero) { NativeMethods.WlanFreeMemory(enabled); } if (connectionSettings != IntPtr.Zero) { NativeMethods.WlanFreeMemory(connectionSettings); } if (securitySettings != IntPtr.Zero) { NativeMethods.WlanFreeMemory(securitySettings); } if (status != IntPtr.Zero) { NativeMethods.WlanFreeMemory(status); } } }
public HostedNetworkManager() { var enabled = IntPtr.Zero; var connectionSettings = IntPtr.Zero; var securitySettings = IntPtr.Zero; var status = IntPtr.Zero; try { Logger.Trace(".ctor: Start invoking native codes..."); Lock(); uint negotiatedVersion; WlanHandle clientHandle; Logger.Trace(".ctor: Invoking WlanOpenHandle..."); var returnValue = NativeMethods.WlanOpenHandle( WlanApiVersion.Version, IntPtr.Zero, out negotiatedVersion, out clientHandle); Logger.Trace(".ctor: WlanOpenHandle returned {0}", returnValue); Utilities.ThrowOnError(returnValue); if (negotiatedVersion != (uint)WlanApiVersion.Version) { Logger.Error(".ctor: Wlan API version negotiation failed"); throw new WlanException("Wlan API version negotiation failed"); } Logger.Trace(".ctor: _wlanHandle: {0:x16}", clientHandle.DangerousGetHandle().ToInt64()); this._wlanHandle = clientHandle; WlanNotificationSource previousNotificationSource; Logger.Trace(".ctor: Invoking WlanRegisterNotification..."); returnValue = NativeMethods.WlanRegisterNotification( clientHandle, WlanNotificationSource.HostedNetwork, true, OnNotification, IntPtr.Zero, IntPtr.Zero, out previousNotificationSource); Logger.Trace(".ctor: WlanRegisterNotification returned {0}", returnValue); Utilities.ThrowOnError(returnValue); WlanHostedNetworkReason faileReason; Logger.Trace(".ctor: Invoking WlanHostedNetworkInitSettings..."); returnValue = NativeMethods.WlanHostedNetworkInitSettings( clientHandle, out faileReason, IntPtr.Zero); Logger.Trace(".ctor: WlanHostedNetworkInitSettings returned {0}", returnValue); Utilities.ThrowOnError(returnValue); uint dataSize; WlanOpcodeValueType opcodeValueType; Logger.Trace(".ctor: Invoking WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.Enable..."); returnValue = NativeMethods.WlanHostedNetworkQueryProperty( clientHandle, WlanHostedNetworkOpcode.Enable, out dataSize, out enabled, out opcodeValueType, IntPtr.Zero); Logger.Trace(".ctor: WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.Enable returned {0}", returnValue); Utilities.ThrowOnError(returnValue); this.IsHostedNetworkAllowed = Convert.ToBoolean(Marshal.ReadInt32(enabled)); Logger.Info(".ctor: IsHostedNetworkAllowed: {0}", this.IsHostedNetworkAllowed); Logger.Trace( ".ctor: Invoking WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.ConnectionSettings..."); returnValue = NativeMethods.WlanHostedNetworkQueryProperty( clientHandle, WlanHostedNetworkOpcode.ConnectionSettings, out dataSize, out connectionSettings, out opcodeValueType, IntPtr.Zero); Utilities.ThrowOnError(returnValue); Logger.Trace( ".ctor: WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.ConnectionSettings returned {0}", returnValue); if (connectionSettings == IntPtr.Zero || Marshal.SizeOf(typeof(WlanHostedNetworkConnectionSettings)) < dataSize) { Logger.Error(".ctor: Got invalid connection setting data"); Utilities.ThrowOnError(13); } this._connectionSettings = (WlanHostedNetworkConnectionSettings) Marshal.PtrToStructure(connectionSettings, typeof(WlanHostedNetworkConnectionSettings)); Logger.Info(".ctor: Connection setting: SSID: {0}, max peer count: {1}", this._connectionSettings.HostedNetworkSSID.SSID, this._connectionSettings.MaxNumberOfPeers); Logger.Trace( ".ctor: Invoking WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.SecuritySettings..."); returnValue = NativeMethods.WlanHostedNetworkQueryProperty( clientHandle, WlanHostedNetworkOpcode.SecuritySettings, out dataSize, out securitySettings, out opcodeValueType, IntPtr.Zero); Logger.Trace( ".ctor: WlanHostedNetworkQueryProperty with WlanHostedNetworkOpcode.ConnectionSettings returned {0}", returnValue); if (securitySettings == IntPtr.Zero || Marshal.SizeOf(typeof(WlanHostedNetworkSecuritySettings)) < dataSize) { Logger.Error(".ctor: Got invalid security setting data"); Utilities.ThrowOnError(13); } this._securitySettings = (WlanHostedNetworkSecuritySettings) Marshal.PtrToStructure(securitySettings, typeof(WlanHostedNetworkSecuritySettings)); Logger.Info(".ctor: Security setting: Authentication algorithm: {0}, cipher algorithm: {1}", this._securitySettings.Dot11AuthAlgo, this._securitySettings.Dot11CipherAlgo); Logger.Trace(".ctor: Invoking WlanHostedNetworkQueryStatus..."); returnValue = NativeMethods.WlanHostedNetworkQueryStatus( clientHandle, out status, IntPtr.Zero); Logger.Trace(".ctor: WlanHostedNetworkQueryStatus returned {0}", returnValue); Utilities.ThrowOnError(returnValue); var wlanHostedNetworkStatus = (WlanHostedNetworkStatus) Marshal.PtrToStructure(status, typeof(WlanHostedNetworkStatus)); _hostedNetworkInterfaceGuid = wlanHostedNetworkStatus.IPDeviceID; _hostedNetworkState = wlanHostedNetworkStatus.HostedNetworkState; Logger.Info( ".ctor: Hosted network status: State: {0}, BSSID: {1}, physical type: {2}, channel frequency: {3}, current number of peers: {4}", wlanHostedNetworkStatus.HostedNetworkState, BitConverter.ToString(wlanHostedNetworkStatus.WlanHostedNetworkBSSID), wlanHostedNetworkStatus.Dot11PhyType, wlanHostedNetworkStatus.ChannelFrequency, wlanHostedNetworkStatus.NumberOfPeers); _icsManager = new ICSManager(); Logger.Trace(".ctor: ICSManager initialized "); } catch (ICSException) { Logger.Trace(".ctor: ICSManager is invalid"); } catch (Win32Exception) { if (!this._wlanHandle.IsInvalid) { this._wlanHandle.Dispose(); } throw; } finally { Unlock(); if (enabled != IntPtr.Zero) { NativeMethods.WlanFreeMemory(enabled); } if (connectionSettings != IntPtr.Zero) { NativeMethods.WlanFreeMemory(connectionSettings); } if (securitySettings != IntPtr.Zero) { NativeMethods.WlanFreeMemory(securitySettings); } if (status != IntPtr.Zero) { NativeMethods.WlanFreeMemory(status); } } }