Добавление беспроводной точки доступа через Smart Device Framework
У меня есть пара вопросов:
В общем, какова общая разница между OpenNETCF.Net
пространство имен и OpenNETCF.Net.NetworkInformation
пространство имен в Smart Device Framework? Кажется, что между ними много общего. Это OpenNETCF.Net
пространство имен теперь устарело в пользу пространства имен NetworkInformation?
Точнее, у меня есть устройство с беспроводным адаптером. Моя цель - иметь возможность запрашивать близлежащие точки доступа, а затем подключаться к ним через мой собственный пользовательский интерфейс.
OpenNETCF.Net.Networking.GetAdapters()[1]
дает мне мой объект адаптера, представляющий беспроводной адаптер. Несмотря на то, что это беспроводной адаптер, IsWireless и IsWirelessZeroConfigCompatible оба возвращают значение false. Однако NearbyAccessPoints возвращает список ближайших точек доступа, как и следовало ожидать от беспроводного адаптера.
Мне нужен способ добавить одну из обнаруженных точек доступа в коллекцию PreferredAccessPoints. Я не нашел способ сделать это в течение OpenNETCF.Net
Пространство имен. Я нашел единственный способ добавить AccessPoint через AddPreferredNetwork()
метод OpenNETCF.Net.NetworkInformation.WirelessZeroConfigNetworkInterface
учебный класс. Проблема в том, что я не смог найти способ получить WirelessZeroConfigNetworkInterface
объект. Объект, возвращаемый NetworkInterface.GetAllNetworkInterfaces()
Метод это просто старый объект NetWorkInterface, а не WirelessZeroConfigNetworkInterface
возражать, как я надеялся. Я уверен, что это, вероятно, связано с проблемой, когда IsWireless возвращает false в NetworkAdapter
объект.
Есть ли способ построить WirelessZeroConfigNetworkInterface
объект, даже если кажется, что фреймворк не беспроводной? Похоже, что функциональность там как продемонстрирована беспроводными методами NetworkAdapter
объект.
1 ответ
Да, история немного запутанная. В основном в SDF 2.2 (или более ранней, я уже не помню) было все в пространстве имен OpenNETCF.Net. Когда я добавлял функции в 2.3, я добавил множество вещей в пространство имен OpenNETCF.Net.NetworkInformation, которое было параллельно с полной структурой. Некоторые из них имели функциональное совпадение с тем, что мы делали в беспроводных технологиях, поэтому я принял решение перенести все в пространство имен OpenNETCF.Net.NetworkInformation. Я оставил оригиналы и отметил их как устаревшие, чтобы попытаться быть дружественными к существующим развертываниям. Элементы, которые вы должны использовать, находятся в пространстве имен OpenNETCF.Net.NetworkInformation.
Теперь о том, как работает материал. Сначала мы запрашиваем NDIS для всех сетевых интерфейсов. Это дает нам проводную, RNDIS, беспроводную связь и т. Д. - в основном все, что знает сетевой стек. NDIS, однако, мало что знает о "беспроводных" вещах - хотя некоторые знают.
Получив список известных адаптеров, мы спрашиваем NDIS, является ли оно беспроводным устройством, - оно может, по крайней мере, сказать нам, что драйвер сообщает NDIS при регистрации.
Получив список беспроводных адаптеров, мы просматриваем их и спрашиваем подсистему WZC, знает ли она об адаптере. WZC - это интерфейс, который знает все о беспроводных устройствах, что позволяет нам взаимодействовать с ним через общий опубликованный интерфейс. Если WZC знает об этом (имеется в виду, что драйвер сообщил о себе при инициализации в WZC), то мы создадим для него WirelessZeroConfigNetworkInterface. Если WZC не знает об этом, то мы знаем, что он беспроводной (NDIS сказал нам, что это так), но у нас есть только методы NDIS для взаимодействия с ним.
NDIS не дает нам возможность общаться. Это дает нам возможность запросить близлежащие идентификаторы SSID. Интерфейс адаптера, который у вас есть, раскрывает возможности, о которых мы знаем.
В некоторых случаях драйвер имеет собственный API для управления настройками WiFi (например, старые карты Cisco).
На какой версии ОС вы работаете? Какой WiFi чипсет / адаптер вы используете?