如何在GetAdaptersAddresses结果中识别“无线托管网络”

时间:2019-03-08 15:15:58

标签: windows winapi wifi

我正在使用GetAdaptersAddresses Win32 API枚举计算机的MAC地址,该API返回该计算机上存在的所有适配器的列表。 当用户打开WiFi时,该列表包含三个新元素:

  • XXXXXXXXFCD8:实际的WiFi(英特尔)
  • XXXXXXXXFCDA:Microsoft虚拟WiFi
  • XXXXXXXXFCDA:Microsoft虚拟WiFi

已经删除了MAC地址的开头,但是除了最后一位被翻转的位以外,其他所有地址都是相同的。我知道那两个虚拟WiFi卡来自Wireless Hosted Network功能,但是我不能要求每个用户都将其关闭。
因为我只对实际的WiFi卡感兴趣,所以我试图找到一种方法来可靠地识别两个“ Microsoft Virtual WiFi”卡。我查看了IP_ADAPTER_ADDRESSES结构的各个成员,这些成员为我提供了以下内容。

真实WiFi:

FriendlyName = Connexion réseau sans fil 4
AdapterName = {57DA33EE-F8E2-4F2C-B989-12EEB680CD64}
Description = Intel(R) Dual Band Wireless-AC 7260 #2
PhysicalAddressLength = 6
PhysicalAddress = 0000XXXXXXXXFCD8
Flags = 01E5
IfType = 71
TunnelType = 0
OperStatus = 1

第一个虚拟WiFi:

FriendlyName = Connexion réseau sans fil 5
AdapterName = {7E6DCD1E-BFBB-41AF-A4B1-467C2FFB5D5E}
Description = Microsoft Virtual WiFi Miniport Adapter #3
PhysicalAddressLength = 6
PhysicalAddress = 0000XXXXXXXXFCDA
Flags = 01C5
IfType = 71
TunnelType = 0
OperStatus = 2

第二个虚拟WiFi

FriendlyName = Connexion réseau sans fil 6
AdapterName = {CC263A05-8034-46C9-9060-FC353D9BBBCB}
Description = Microsoft Virtual WiFi Miniport Adapter #4
PhysicalAddressLength = 6
PhysicalAddress = 0000XXXXXXXXFCDA
Flags = 01C5
IfType = 71
TunnelType = 0
OperStatus = 2

如您所见,除了Description(似乎没有被本地化)之外,我看不到这三个网卡之间的任何区别。

您是否知道另一个API,可以让我检查给定的适配器是否源自“无线托管网络”功能?

如果没有,您是否认为在Description成员中搜索Microsoft Virtual WiFi会是一种具有时间弹性的方式?

1 个答案:

答案 0 :(得分:1)

Flags在适配器之间是不同的

真正的WiFi具有以下标志:

  

0x01E5(0111100101)

虚拟适配器具有以下标志:

  

0x01C5(0111000101)

如您所见,它们相差1位。

Microsoft确实具有一组用于Wireless Hosted Network的API函数。您可以尝试查询托管网络的信息,然后尝试将其与适配器信息进行匹配。例如,WlanHostedNetworkQueryStatus将为您提供托管网络的虚拟设备的GUID。

此外,Microsoft具有WlanEnumInterfaces() 功能,用于确定可用的WiFi网络接口及其GUID。根据文档,虚拟主机网络接口不包括在此列表中。因此,您也可以尝试将其用作一种过滤机制。