我正在使用GetAdaptersAddresses
Win32 API枚举计算机的MAC地址,该API返回该计算机上存在的所有适配器的列表。
当用户打开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
会是一种具有时间弹性的方式?
答案 0 :(得分:1)
Flags
在适配器之间是不同的
真正的WiFi具有以下标志:
0x01E5(0111100101)
虚拟适配器具有以下标志:
0x01C5(0111000101)
如您所见,它们相差1位。
Microsoft确实具有一组用于Wireless Hosted Network的API函数。您可以尝试查询托管网络的信息,然后尝试将其与适配器信息进行匹配。例如,WlanHostedNetworkQueryStatus
将为您提供托管网络的虚拟设备的GUID。
此外,Microsoft具有WlanEnumInterfaces()
功能,用于确定可用的WiFi网络接口及其GUID。根据文档,虚拟主机网络接口不包括在此列表中。因此,您也可以尝试将其用作一种过滤机制。