Невозможно получить профиль подключенной сети в Vista / 7 - PullRequest
0 голосов
/ 05 июля 2011

У меня есть фрагмент кода, реализованный с использованием Managed Native WiFi.Он используется для получения сведений о профиле подключенной сети для отображения на экране.

 
               // Start the wireless configuration service if it is stopped
                startservice();
                WlanClient client = new WlanClient();
                bHasWiFi = false;
                string strConnectionStatus = Constants.BlankString;

                // Enumerate all interfaces
                foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
                {
                    bHasWiFi = true;
                    strConnectionStatus = wlanIface.InterfaceState.ToString();

                    // Check whether disconnected
                    if (strConnectionStatus == Constants.Disconnected)
                    {
                        IsConnected = false;
                        continue; //iterate to next interface if any
                    }
                    else
                    {
                        string strProfileName = wlanIface.CurrentConnection.profileName.ToString();
                        ErrorLog.WriteLogMsg("Connected Profile  : " + strProfileName);
                        strDefaultNetwork = wlanIface.CurrentConnection.wlanAssociationAttributes.dot11BssType.ToString();
                        ErrorLog.WriteLogMsg("Connected Network Type  : " + strDefaultNetwork);
                        if (strProfileName.Length != 0)
                        {
                            // Obtain Profile XML
                            string strXmlProfile = wlanIface.GetProfileXml(strProfileName);

                            // Read channel information if OS not Windows XP
                            if(strCurOS != Constants.WindowsXP)
                                intChannel = wlanIface.Channel;

                            // Extract profile information
                            GetNetworkProfileXML(ref IsConnected, ref strDefaultAuth, ref strDefaultSSID, ref strDefaultEnc, ref strDefaultKey, wlanIface, ref strXmlProfile);

                            // Process and store the profile data
                            GetDatfromProfiles(strDefaultNetwork, strDefaultAuth, strDefaultSSID, strDefaultEnc, strDefaultKey, strCurOS, intChannel);
                        }
                        else
                        {
                            ErrorLog.WriteLogMsg("Blank profile name");
                            IsConnected = false; // Set error flag
                        }
                        break;
                    }
                }

                // Error cases
                if (!IsConnected || !bHasWiFi)
                {
                    if (!bHasWiFi)
                        throw new Exception("Unable to enumerate the wireless interfaces");
                    else if (!IsConnected)
                        throw new Exception("WiFi is not configured or is disconnected");
                }
            }

Когда этот код выполняется в Vista / Windows 7 и сеть подключена без сохранения профилей, метод GetProfileXMlвыдает ошибку

01: 18: 12 Метод: ThrowIfError

01: 18: 12 Сообщение журнала: элемент не найден

01: 18: 12 Трассировка стека: в NativeWifi.Wlan.ThrowIfError (Int32 win32ErrorCode) в NativeWifi.WlanClient.WlanInterface.GetProfileXml (String profileName)

И было замечено, что в Vista и Windows 7 профили не сохраняются во время подключениядля инфраструктуры, если пользователь не выбирает «Автоматически подключаться».Кроме того, профили adhoc никогда не сохраняются, поскольку эта опция не предоставляется пользователю во время подключения.

Кто-нибудь знает, как прочитать XML / подробности о подключенном профиле, даже если он не сохранен?Заранее спасибо.

1 Ответ

1 голос
/ 10 января 2012

Если вы зарегистрируетесь для получения уведомлений до того, как будет установлено соединение (см. здесь ), вы сможете изучить поле strProfileXml структуры WLAN_CONNECTION_NOTIFICATION_DATA при получении уведомления wlan_notification_acm_connection_complete.

...