Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        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);
                }
            }
        }