提问人:michaelr524 提问时间:2/19/2013 更新时间:2/20/2013 访问量:2671
在 WinXP 及更高版本的 C++ 中获取无线适配器的 MAC 地址
get mac addresses of wireless adapters in c++ on WinXP and above
问:
我想要以上。 我找到了 IP Helper API,它可以工作。唯一的问题是,在早于Vista的系统上,我无法识别适配器是无线的还是常规以太网的。 我还需要支持 WinXP 和 Server 2003。
以下是文档(IP Helper)中的相关引用:
IEEE 802.11 无线网络接口。 注意:在 Windows Vista 及更高版本上返回此适配器类型。在 Windows Server 2003 和 >Windows XP 上,IEEE 802.11 无线网络接口返回适配器类型 >MIB_IF_TYPE_ETHERNET。
那么,在 WinXP/Server2003 及更高版本上识别无线适配器并获取其 MAC 地址的好方法是什么?
答:
GetAdapterAddresses 是 Windows API 的一部分,应提供有关 mac 地址和 NIC 类型的信息。
调用返回指向适配器链表的结构。
请确保不要对结构的大小进行硬编码以保持 Windows 版本之间的可移植性,因为结构在版本之间更改了大小。IP_ADAPTER_ADDRESSES
编辑:
这显然只给你mac地址,因为它只在Vista之后报告正确的类型
但是,GetIfTable 返回一个结构,从中可以读取具有 dwType 的结构,该结构可能不是 IF_TYPE_IEEE80211 类型。这没有说明这对 Vista 来说是特别的,并且应该对 XP 有效,除非 MS 搞砸了他们的文档。MIB_IFTABLE
MIB_IFROW
这两个卡都应该有一个物理地址,因此您应该能够匹配这两个条目以识别一张卡。
评论
如果您打算从头开始支持XP,那么这是在将Native Wifi API引入XP之前(SP 2和3支持Native Wifi API)。
我认为通过WMI仍然可能有机会。您也许能够创建一个Win32_NetworkAdapter
(已弃用的 WMI 类) 在此类中,您应该能够提取它来判断它是否是无线设备,并为您提供 MAC 地址。AdapterTypeID
MACAddress
因此,我认为您的选择是支持 Windows XP SP 2 及更高版本,或者必须与 WMI 和已弃用的类集成。看起来无论如何都有骆驼可以吞下。
评论
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter") For Each objItem in colItems Wscript.Echo "Name: " & objItem.Name Wscript.Echo "Description: " & objItem.Description Wscript.Echo "MACAddress: " & objItem.MACAddress Wscript.Echo "AdapterType: " & objItem.AdapterType Next
评论