相关疑难解决方法(0)

快速替换Win32_NetworkAdapter WMI类以获取本地计算机的MAC地址

TL; DR版本的问题:WMI Win32_NetworkAdapter类包含我需要的信息,但是太慢了。在Windows上获取MACAddress,ConfigManagerErrorCode和PNPDeviceID列的信息的更快方法是什么?

我需要检索连接的网络适配器的信息,以便可以获取MAC地址来唯一标识本地Microsoft Windows计算机。WMI Win32_NetworkAdapter类似乎具有我在寻找的信息。MACAddress,ConfigManagerErrorCode和PNPDeviceID列是我真正需要的唯一列:

  • MACAddress:MAC地址(此操作的目标)
  • ConfigManagerErrorCode:允许我确定适配器是否已启用并正在运行。(如果已禁用,则应使用我的应用先前缓存的MAC地址(如果有))。
  • PNPDeviceID:通过检查“ PCI”(如果需要,可能还有其他接口)的前缀,我可以过滤掉非物理适配器,在我的Windows 7盒中有几个(包括虚拟适配器,例如VMware / VirtualBox) 。

我的计划是使用PNPDeviceID过滤掉非物理设备。然后,我将在所有剩余的表条目上使用MACAddress列(将地址保存到缓存中)。当设备被禁用(可能由非零的ConfigManagerErrorCode指示)并且MACAddress为空时,我可以从缓存中对该设备使用以前看到的MACAddress。

您可以在Windows 7计算机上看到此表的内容。您可以看到其中有大量垃圾,但是只有一个带有“ PCI” PNPDeviceID的条目。

wmic:root\cli>NIC GET Caption, ConfigManagerErrorCode, MACAddress, PNPDeviceID
Caption                                                   ConfigManagerErrorCode  MACAddress         PNPDeviceID
[00000000] WAN Miniport (SSTP)                            0                                          ROOT\MS_SSTPMINIPORT\0000
[00000001] WAN Miniport (IKEv2)                           0                                          ROOT\MS_AGILEVPNMINIPORT\0000
[00000002] WAN Miniport (L2TP)                            0                                          ROOT\MS_L2TPMINIPORT\0000
[00000003] WAN Miniport (PPTP)                            0                                          ROOT\MS_PPTPMINIPORT\0000
[00000004] WAN Miniport (PPPOE)                           0                                          ROOT\MS_PPPOEMINIPORT\0000
[00000005] WAN Miniport (IPv6)                            0                                          ROOT\MS_NDISWANIPV6\0000
[00000006] WAN Miniport (Network Monitor)                 0                                          ROOT\MS_NDISWANBH\0000
[00000007] Intel(R) 82567LM-2 Gigabit Network Connection …
Run Code Online (Sandbox Code Playgroud)

c# c++ windows wmi networking

4
推荐指数
1
解决办法
8761
查看次数

标签 统计

c# ×1

c++ ×1

networking ×1

windows ×1

wmi ×1