windows下判断网卡是否是虚拟网卡的方式

windows下判断网卡是否是虚拟网卡的方式

网上流传的判断虚拟网卡的方式通常是判断网卡名称,以PCI开头的网卡都是真实网卡。因为以前网卡都是PCI网卡,不是的就是虚拟网卡。但是这种方式不一定全部正确,因为现在有些网卡不是PCI网卡,例如USB网卡,但是它依然是真实网卡。所以这种方法就不在可靠了。
最可靠的方法是读取注册表来判断,是我目前发现的最可靠的方法。
首先要知道网卡的名字,可以通过GetAdaptersInfo获取到
然后用GetAdaptersInfo获取和此名字相同的网卡信息PIP_ADAPTER_INFO结构中的AdapterName字段。注意AdapterName并不是指我们通常看到的名字,而是一段字符和数字组合的文字,我们通常看到的网卡的名字是Description字段。
然后用AdapterName字段中的内容找到注册表中的对应的位置,可以让我们找到网卡的相信信息。
网卡信息存在注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}中,这个键下面有一些子键,这些子键中的NetCfgInstanceId的值对应的就是我们刚才查找到的AdapterName。这个子键中的Characteristics的值就可以判断是否是虚拟网卡,Characteristics本质是一些按位存储的值得集合:


ox1 NCF_VIRTUAL 说明组件是个虚拟适配器
ox2 NCF_SOFTWARE_ENUMERATED 说明组件是一个软件模拟的适配器
ox4 NCF_PHYSICAL 说明组件是一个物理适配器
ox8 NCF_HIDDEN 说明组件不显示用户接口
ox10 NCF_NO_SERVICE 说明组件没有相关的服务(设 备驱动程序)
ox20 NCF_NOT_USER_REMOVABLE 说明不能被用户删除(例如,通过控制面板或设备管理器)
ox40 NCF_MULTIPORT_INSTANCED_ADAPTER 说明组件有多个端口,每个端口作为单独的设备安装。每个端口有自己的hw_id(组件ID)并可被单独安装,这只适合于EISA适配器
ox80 NCF_HAS_UI 说明组件支持用户接口(例如,Advanced Page或Customer Properties Sheet)
ox400 NCF_FILTER 说明组件是一个过滤器

从上面可以看出来,只要用户判断Characteristics的值就可以判断网卡是虚拟网卡还是物理网卡。
看一下这个值和4进行与运算是否大于0,大于0的就是物理的网卡。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值