我有几个问题:
一般而言,智能设备框架中的OpenNETCF.Net命名空间和OpenNETCF.Net.NetworkInformation命名空间之间的一般区别是什么?两者之间似乎有很多功能重叠。现在支持NetworkInformation名称空间而不推荐使用OpenNETCF.Net名称空间了吗?
更具体地说,我有一个带有无线适配器的设备。我的目标是能够查询附近的接入点,然后通过我自己的用户界面连接到它们。
OpenNETCF.Net.Networking.GetAdapters()[1]为我提供了表示无线适配器的适配器对象。即使这是一个无线适配器,IsWireless和IsWirelessZeroConfigCompatible也都返回false。但是,正如您期望无线适配器所做的那样,NearbyAccessPoints确实会返回附近接入点的列表。
我需要一种方法将发现的一个访问点添加到PreferredAccessPoints集合中。我还没有找到在OpenNETCF.Net名称空间中实现这一点的方法。我发现添加AccessPoint的惟一方法是通过OpenNETCF.Net.NetworkInformation.WirelessZeroConfigNetworkInterface类的AddPreferredNetwork()方法。我遇到的问题是,我一直无法找到获取WirelessZeroConfigNetworkInterface对象的方法。NetworkInterface.GetAllNetworkInterfaces()方法返回的对象只是一个普通的老式NetWorkInterface对象,而不是我所希望的WirelessZeroConfigNetworkInterface对象。我确信这可能与NetworkAdapter对象中IsWireless返回false的问题有关。
有没有一种方法可以构造WirelessZeroConfigNetworkInterface对象,即使框架似乎认为它不是无线的?看起来功能已经存在,正如NetworkAdapter对象的无线相关方法所演示的那样。
发布于 2011-09-24 02:41:23
是的,这段历史有点令人困惑。基本上,SDF2.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的方法。然后,您拥有的Adapter接口公开了我们所知道的功能。
在某些情况下,驱动程序具有专有的应用程序接口来操作WiFi设置(例如,旧的Cisco卡)。
您运行的是什么版本的操作系统?您使用的是哪种WiFi芯片组/适配器?
https://stackoverflow.com/questions/7531943
复制相似问题