区分虚拟网卡和物理网卡

news2024/9/27 15:24:24
  1. 枚举注册表网卡信息 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
  2. 读取没一项的CharacteristicsNetCfgInstanceId信息
  3. Characteristics & NCF_PHYSICAL 即为物理网卡

在这里插入图片描述

Characteristics值
类型说明
NCF_VIRTUAL0x01组件是一个虚拟适配器
NCF_SOFTWARE_ENUMERATED0x02组件是一个软件模拟的适配器
NCF_PHYSICAL0x04组件是一个物理适配器
NCF_HIDDEN0x08组件不显示用户接口
NCF_NO_SERVICE0x10组件没有相关的服务(设 备驱动程序)
NCF_NOT_USER_REMOVABLE0x20组件不能被用户删除(例如,通过控制面板或设备管理器)
NCF_MULTIPORT_INSTANCED_ADAPTER0x40组件有多个端口,每个端口作为单独的设备安装。每个端口有自己的hw_id(组件ID)并可被单独安装,这只适合于EISA适配器
NCF_HAS_UI0x80组件支持用户接口(例如,Advanced Page或Customer Properties Sheet)
NCF_FILTER0x400组件是一个过滤器
NetCfgInstanceId

PIP_ADAPTER_INFOAdapterName字段

	std::map<std::string, DWORD> netcard_control_info()
	{
		std::map<std::string, DWORD> ret_val;
		std::vector<std::string> vec_keys;
		Registry::EnumKey(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}"), vec_keys, false, true);

		for (auto& item : vec_keys)
		{
			std::string  NetCfgInstanceId;
			DWORD Characteristics;
			Registry::Read(HKEY_LOCAL_MACHINE, item.c_str(), "NetCfgInstanceId", NetCfgInstanceId);
			Registry::Read(HKEY_LOCAL_MACHINE, item.c_str(), "Characteristics", Characteristics);
			ret_val[NetCfgInstanceId] = Characteristics;
		}

		return ret_val;
	}

	bool is_virtual_netcard(const std::string& id, const std::map<std::string, DWORD>& flags)
	{
		if (flags.count(id))
		{
			DWORD dwflags = flags.at(id);
			return (~dwflags & 0x04) != 0;
		}
		return false;
	}

示例

std::map<std::string, DWORD> netcardc_info = netcard_control_info();
bool is_virtual = is_virtual_netcard(pIpAdapterInfo->AdapterName, netcardc_info);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32L051K8U6-HAL-LED闪烁设计

HAL三步法&#xff1a; 1、配置下载线 2、配置晶振 3、配置时钟 注意&#xff1a;中断优先级&#xff08;这里防止HAL_Delay卡死&#xff0c;详细请看 http://t.csdnimg.cn/NQhQV&#xff09; 4、 配置灯引脚属性为输出模式。并设置标签为LED 生成代码&#xff1a;编写while里…

《关于触手 AI 图像合成算法的分析报告》

一、算法全周期行为分析 算法安全 信息内容安全&#xff1a;在图像生成过程中&#xff0c;需要确保所生成的图像内容不包含违法、有害、侵犯他人权益或违反道德规范的信息。例如&#xff0c;不能生成涉及暴力、色情、恐怖主义等内容的图像。信息源安全&#xff1a;对于输入的原…

警惕智能手机的“隐形眼”:如何保护我们的数字隐私堡垒

随着智能手机深入我们生活的方方面面&#xff0c;它变得无所不在&#xff0c;甚至无所不知。 但你是否意识到&#xff0c;你的手机可能正在悄无声息地“监听”你的一举一动&#xff1f; 从你的搜索习惯到日常对话&#xff0c;手机的个性化推荐系统正不断收集你的数据。 本文…

参考图片神器《PureRef》,带下载。

画画、建模或者做设计看参考时&#xff0c;是否经常为不能同时共存两个页面而苦恼。 今天就给大家推荐一个能解决这个问题得软件——PureRef 下载地址&#xff1a;PureRef 2.0汉化版 汉化版2.0 蓝奏云&#xff1a; https://wwz.lanzouq.com/iyUTy1zt2b4d 下面是一些软件快…

UWA Gears兼容性数据公开

UWA最新发布了无SDK性能分析工具 - UWA Gears。该工具能够实时监测应用的CPU和GPU性能&#xff0c;无需代码改动即可掌握性能动态。此外&#xff0c;Gears还能截取应用的渲染画面进行深度分析&#xff0c;帮助您快速找到性能瓶颈并进行精准优化。 本篇内容为开发者提供了Gears…

【LVS】防火墙标签解决轮询错误

实验&#xff1a; 测试&#xff1a; 实验&#xff1a; 两个服务端下载软件在重启httpd lvs 标记多端口 多端口自动识别 测试 防火墙标记解决轮回问题

关于IAR的ICF编程操作

最近有一个项目需要对ICF进行外部编程。两个工程引用相同的ICF&#xff0c;通过外部输入参数来区分内部的地址范围。通过相关资料的研究&#xff0c;cmake可以通过参数导入一个变量来就觉这个问题。后来参考IAR手册发现可以在IDE中定义. 例子&#xff1a; icf文件&#xff1a…

Java Kafka消费者组位移重设深度解析与实践

简介 在现代的分布式系统中&#xff0c;消息队列扮演着至关重要的角色。Apache Kafka&#xff0c;以其高吞吐量、高可靠性和优秀的容错性&#xff0c;成为了众多企业的首选消息系统。在使用Kafka过程中&#xff0c;消费者组位移的管理是一个常见且关键的议题。本文将深入探讨K…

Excel中的高效查找利器:VLOOKUP函数深度解析与应用实战

文章目录 前言一、VLOOKUP基础应用二、常见用法1.精确匹配2.近似匹配3.反向查找4.多条件查找5.屏蔽错误值6.关键字查找&#xff08;模糊查找&#xff09;7.文本数值混合查找8.去除空格查找 前言 VLOOKUP函数是Excel中用于在数据表中进行垂直查找的强大工具。它能根据用户指定的…

html+css+js网页设计 中国电信1个页面(带js)

htmlcssjs网页设计 中国电信1个页面&#xff08;带js&#xff09; 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xf…

Android 文件上传与下载

在实际开发涉及文件上传不会自己写上传代码&#xff0c;一般 会集成第三网络库来做图片上传&#xff0c;比如android-async-http&#xff0c;okhttp等&#xff0c;另外还有七牛也提供 了下载和上传的API。 1.项目用到的图片上传的关键方法&#xff1a; 这里用到一个第三方的库…

ChatGPT辅助论文写作各阶段提示词分享

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 随着人工智能技术的迅速发展&#xff0c;ChatGPT作为一种强大的语言模型&#xff0c;已经在各个领域展现出其独特的应用价值。在学术论文写作过程中&#xff0c;ChatGPT不仅可以帮助研究…

细节持续跟新

1.input的自带光标如何去除 2.阻止事件冒泡 3.获取父亲兄弟的innertext 4.画表格 参考博主链接 前端-HTML表格制作_哔哩哔哩_bilibili 美化

[CSCCTF 2019 Qual]FlaskLight (jinja2模版注入)

两种方法&#xff1a; 1.工具法 进来看见flask到处飘&#xff0c;估计就是ssti ctrlU打开发现两行注释提示GET方式传递参数search 这种有参数的我先直接丢fengjing扫了一下&#xff0c;结果还真搞出来&#xff0c;这工具还是挺牛的&#xff0c;就是没参数的时候搞不了 fengj…

在 Ubuntu 24.04 LTS 上安装 MySQL 8

1. 更新系统软件包 在开始安装 MySQL 之前&#xff0c;确保你的系统软件包是最新的。 sudo apt update sudo apt upgrade -y 2. 添加 MySQL APT 存储库 首先&#xff0c;下载 MySQL APT 存储库的包&#xff1a; wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1…

软件工程_软件过程模型__20240806

1:软件过程模型 1.11:敏捷方法 敏捷方法-XP 四大价值观 沟通[加强面对面沟通] 简单[不过度设计] 反馈[及时反馈] 勇气[接受变更的勇气]12条过程实践规则 简单设计 测试驱动 代码重构 结对编程 持续集成 现场客户 发行版本小型化 系统隐喻 代码集体所有制 规划策略 规范代码…

【数据结构】五、树:8.并查集

4.并查集Disjoint Set 文章目录 4.并查集Disjoint Set4.1查4.2并❗4.3代码实现4.4对union优化4.5对Find的优化&#xff08;压缩路径&#xff09;❗4.6并查集C代码&#xff08;优化后&#xff09;按秩合并 集合。在集合中将各个元素划分为若干个 互不相交的子集。 如何表示&quo…

uniapp video播放视频 悬浮在屏幕无法滑动

背景&#xff1a; 在uniapp中&#xff0c;需要使用<video></video>标签进行播放动态src的视频。 1.在开发的时候&#xff0c;运行到浏览器&#xff0c;vedio标签正常&#xff1b;(使用HbuildX运行&#xff0c;运行 -->运行到浏览器)。 2.但是在打包成原生App&am…

【数据结构】栈篇

文章目录 1. 栈2. 栈的实现2.1 准备工作2.2 栈的初始化2.3 入栈2.4 出栈2.5 判断栈是否为空2.6 取出栈顶元素2.7 获取栈中有效元素个数2.8 销毁栈效果图 3.代码整合 1. 栈 栈是一种特殊的线性表&#xff0c;其只允许固定一端进行插入和删除元素操作。进行数据的插入和删除操作的…

qt项目之在线考试系统----------MVC使用模型-视图-控制器

1、什么是MVC的设计模式 在Qt中,MVC是一种设计模式,全称为Model-View-Controller(模型-视图-控制器)。这是一个经典的设计模式,用于将数据表示(Model)、用户界面(View)和业务逻辑(Controller)分离。具体来说,MVC设计模式在Qt中的应用如下: Model(模型):表示应用…