0

我有几个问题:

OpenNETCF.Net一般来说,命名空间和OpenNETCF.Net.NetworkInformation智能设备框架中的命名空间有什么区别?两者之间似乎有很多功能重叠。现在是否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 在NetworkAdapter对象中返回 false 的问题有关。

WirelessZeroConfigNetworkInterface即使框架似乎认为它不是无线的,有没有办法构造对象?看起来该功能已由NetworkAdapter对象的无线相关方法演示。

4

1 回答 1

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 的方法。然后,您拥有的 Adapter 接口公开了我们所知道的功能。

在某些情况下,驱动程序有一个专有的 API 来操作 WiFi 设置(例如旧的 Cisco 卡)。

你运行的是什么版本的操作系统?您使用的是什么 WiFi 芯片组/适配器?

于 2011-09-23T18:41:23.330 回答