首页 > 学院 > 开发设计 > 正文

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

2019-11-14 09:46:48
字体:
来源:转载
供稿:网友

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的就是物理的网卡。


上一篇:bzoj4539 [Hnoi2016]树

下一篇:VC++简单窗口

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表