Я пытаюсь создать и подключиться к профилю WLAN с помощью собственного WiFi (https://managedwifi.codeplex.com/). Я могу просмотреть весь список BSS сети и их параметры. Однако, когда я пытаюсь создать/перезаписать WLAN профиль, я получаю сообщение об ошибке указанной ниже (Ошибка № 1):Проблемы с использованием управляемого WiFi (NativeWiFi API)
Необработанное исключение типа «System.ComponentModel.Win32Exception» произошло в ManagedWifi.dll ,
Дополнительная информация: Профиль подключения к сети повреждена
Однако, когда я создал профиль, обычно из «Сеть и коммутационный центр» панели управления Windows 7, а затем пытался подключиться с помощью ManagedWiFi, я получить еще одно сообщение об ошибке (Error # 2):
необработанное исключение типа 'System.ArgumentException' произошло в mscorlib.dll
Дополнительная информация: Тип «NativeWifi.Wlan + Wla nReasonCode 'не может быть маршализирован как неуправляемая структура; никакие значимые размеры или смещение не могут быть вычислены.
Я заметил, что эта ошибка возникает, даже если я пытаюсь подключиться/отключиться от профиля WLAN из «Центра управления сетями и общим доступом», при этом приложение Windows работает в фоновом режиме.
Вот пример кода, который я использую:
Dim profileName As String = GlobalVariables.ssidname ' Provides the selected SSID name from the Network BSS List
Dim hexval As String = StringToHex(GlobalVariables.ssidname) ' Function to get the hexadecimal value for a provided string
Dim key As String = TextBox1.Text ' Security key from the textbook provided
Dim profileXml As String = String.Format("<?xml version=""1.0""?><WLANProfile xmlns=""http://www.microsoft.com/networking/WLAN/profile/v1""><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", 'GlobalVariables.ssidname, hexval, TextBox1.Text)
wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, True) 'Error#1 occurs here
wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName) 'Error#2 occurs here
С форума «Type Native Wifi.Wlan + WlanReasonCode cannot be marshaled error», вопрос (Error # 2), как представляется, в пределах WlanAPI.cs, где есть линия код, который проверяет размер кода возврата. Это линия:
int expectedSize = Marshal.SizeOf(typeof(Wlan.WlanReasonCode));
if (notifyData.dataSize >= expectedSize)
{
Wlan.WlanReasonCode reasonCode = (Wlan.WlanReasonCode)Marshal.ReadInt32(notifyData.dataPtr);
if (wlanIface != null)
wlanIface.OnWlanReason(notifyData, reasonCode);
}
Возможно, изменение вышеуказанного кода на нижеследующее устраняет проблему.
//int expectedSize = Marshal.SizeOf(typeof(Wlan.WlanReasonCode));
if (notifyData.dataSize >= 0)
{
Wlan.WlanReasonCode reasonCode = (Wlan.WlanReasonCode)Marshal.ReadInt32(notifyData.dataPtr);
if (wlanIface != null)
wlanIface.OnWlanReason(notifyData, reasonCode);
}
Однако я не уверен, как добавить это исправление в мое решение. Я установил ManagedWiFi из диспетчера пакетов NuGet. Следовательно, не знаете, как изменить файл WlanApi.cs. Любая помощь в отношении вышеупомянутых двух проблем очень ценится.
Странно то, что это изменение ни на что не влияет. Посмотрев на это, можно сказать, что это увеличивает риск исключений, так как то, что делает этот код, заключается в том, что он проверяет, что размер 'notifyData' имеет, по крайней мере, тот же размер, что и' Wlan.WlanReasonCode' (если это целая перечисление, размер должен быть '4', как в 4 байта/int). –
Ошибка # 2, по-видимому, исправлена, поскольку я удалил пакет ManagedWiFi из своего решения и добавил весь проект ManagedWiFi в решение. Затем я внес изменения в WlanApi.cs, как указано в исправлении выше. –
Хорошо, что это положительно, тогда, должно быть, проблема с пакетом NuGet, но создание исходного кода все еще работает. –