检测防火墙是否开启、判断程序是否加入防火墙白名单(附源码)
VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)
https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)
https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章正在更新中...)
https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)
https://blog.csdn.net/chenlycly/category_11931267.html 本文介绍通过INetFwMgr、INetFwPolicy、INetFwProfile等COM接口去检测防火防是否开启,检测当前进程是否加入了防火墙白名单。
对于Windows10系统,启动/关闭系统防火墙的页面如下:

设置允许通过Windows防火墙进行通信的页面如下:

使用COM组件检测防火墙是否开启、检测程序是否允许通过防火墙进行通信(加入防火墙白名单)的完整代码如下:
BOOL DetectFirewallSettings( BOOL* bExeEnableFW )
{BOOL status = FALSE;HRESULT hr = S_FALSE;INetFwMgr* fwMgr = NULL;INetFwPolicy* fwPolicy = NULL;INetFwProfile* fwProfile = NULL;INetFwAuthorizedApplications *apps = NULL;INetFwAuthorizedApplication *app = NULL;FW_ERROR_CODE ret = FW_NOERROR;VARIANT_BOOL bFWEnabled;VARIANT_BOOL bDoNoteAllowExceptions;CoInitialize( NULL );try{// Create an instance of the firewall settings manager.hr = CoCreateInstance( __uuidof(NetFwMgr), NULL, CLSCTX_INPROC_SERVER, __uuidof( INetFwMgr), (void**)&fwMgr );if( FAILED( hr ) ){throw FW_ERR_CREATE_SETTING_MANAGER;}// Retrieve the local firewall policy.hr = fwMgr->get_LocalPolicy( &fwPolicy );if( FAILED( hr ) ){throw FW_ERR_LOCAL_POLICY;}// Retrieve the firewall profile currently in effecthr = fwPolicy->get_CurrentProfile( &fwProfile );if( FAILED( hr ) ){throw FW_ERR_PROFILE;}// 1、是否开启了防火墙hr = fwProfile->get_FirewallEnabled( &bFWEnabled );if( FAILED( hr ) ){throw FW_ERR_FIREWALL_IS_ENABLED;}if( bFWEnabled ){// 开启了防火墙,再检测是否允许例外hr = fwProfile->get_ExceptionsNotAllowed( &bDoNoteAllowExceptions );if( FAILED(hr) ){throw FW_ERR_FIREWALL_IS_ENABLED;}if( bDoNoteAllowExceptions ){status = TRUE;}else{// 允许意外// 2、得到授权应用程序hr = fwProfile->get_AuthorizedApplications( &apps );if( FAILED(hr) ){status = TRUE;throw FW_ERR_FIREWALL_IS_ENABLED;}// 3、获取当前进程的进程名TCHAR szPEBuff[MAX_PATH] = {0};GetModuleFileName( NULL, szPEBuff, MAX_PATH );BSTR bstrTemp = _bstr_t( szPEBuff );// 看当前进程在不在允许列表中hr = apps->Item( bstrTemp, &app );if( FAILED(hr) ){// 不在允许列表中status = TRUE;throw FW_ERR_FIREWALL_IS_ENABLED;}else{//在允许列表中,查看是否允许通过防火墙hr = app->get_Enabled( &bFWEnabled );if( FAILED(hr) ){status = TRUE;throw FW_ERR_FIREWALL_IS_ENABLED;}if( bFWEnabled != VARIANT_FALSE ){status = FALSE;if ( bExeEnableFW != NULL ){*bExeEnableFW = true;}}else{status = TRUE;}}}}}catch( FW_ERROR_CODE nError ){ret = nError;}if( fwPolicy ){fwPolicy->Release();}if( fwMgr ){fwMgr->Release();}CoUninitialize();return status;
}
上述接口的返回值标识防护墙是否开启,接口的传出参数bExeEnableFW标识当前程序是否允许通过防火墙进行通信。
相关文章:
检测防火墙是否开启、判断程序是否加入防火墙白名单(附源码)
VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…...
vtk 动画入门 1 代码
实现效果如图: #include <vtkAutoInit.h> //VTK_MODULE_INIT(vtkRenderingOpenGL2); //VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); //VTK_MODULE_INIT(vtkRenderingFreeType); #in…...
【VR】【unity】如何在VR中实现远程投屏功能?
【背景】 目前主流的VD应用,用于娱乐很棒,但是用于工作还是无法效率地操作键鼠。用虚拟键盘工作则显然是不现实的。为了让自己的头显能够起到小面积代替多显示屏的作用,自己动手开发投屏VR应用。 【思路】 先实现C#的投屏应用。研究如何将C#投屏应用用Unity 3D项目转写。…...
OpenGl材质
在现实世界里,每个物体会对光产生不同的反应。比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter),因而产生较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的…...
背包问题
目录 开端 01背包问题 AcWing 01背包问题 Luogu P2925干草出售 Luogu P1048采药 完全背包问题 AcWing 完全背包问题 Luogu P1853投资的最大效益 多重背包问题 AcWing 多重背包问题 I AcWing 多重背包问题 II Luogu P1776宝物筛选 混合背包问题 AcWing 混合背包问题…...
JavaSE | 初始Java(十一) | 抽象类和抽象接口
抽象类概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的, 如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类 在 Java 中,一个…...
产品经理如何科学的进行需求调研?
导语:作为产品经理,需求调研是开展工作的重要环节之一。科学、有效地进行需求调研不仅可以帮助产品经理更好地了解用户需求,还能指导产品设计和功能开发,提升产品的竞争力。本文将介绍几种科学的方法和技巧,帮助产品经…...
AI智能问答系统源码/AI绘画商业系统/支持GPT联网提问/支持Midjourney绘画
一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…...
玩具玩偶配送经营商城小程序的作用是什么?
玩具玩偶是小孩子们喜欢的产品,其市场需求度很高,以前玩具店里总是不缺乏客户,但现在随着人们生活品牌提升及消费形式改变,无论玩具厂商还是门店经销商都面对着不少痛点: 如拓客引流难、线上销售经营难、营销难、分销…...
latex表格内容换行
问题描述: 在用latex表格中编写公式时,可能出现公式太长,表格中后面的内容不能在文档中呈现,如下图1,故要进行行内内容的换行,使内容呈现完全而传统的\换行后,换行内容会顶格,如图2。 解决方…...
2023 牛客国庆day4 【10.2训练补题】
目录 B-Basic Gcd Problem(素数筛快速幂) H-Harder Gcd Problem(素数) B-Basic Gcd Problem(素数筛快速幂) 打表找规律发现答案为 (n质因子数目)^c #include<bits/stdc.h> using namespace std;…...
android的USB开发时 mUsbManager.getDeviceList()获取都为空
类提供的主要方法有: getDeviceList() 获得设备列表,返回的是一个HashMap.;hasPermission(UsbDevice device) 判断你的应用程序是否有接入此USB设备的权限,如果有则返回真,否则返回false.openDevice(UsbDevice device) 打开USB设…...
SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务
目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包,解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…...
Java基础面试,接口和抽象类的区别?
接口和抽象类的区别? 抽象类可以存在普通成员函数,而接口中只能存在public abstract 方法。抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的.抽象类只能继承一个,接口可以实现多个。 接…...
《视觉 SLAM 十四讲》V2 第 4 讲 李群与李代数 【什么样的相机位姿 最符合 当前观测数据】
P71 文章目录 4.1 李群与李代数基础4.1.3 李代数的定义4.1.4 李代数 so(3)4.1.5 李代数 se(3) 4.2 指数与对数映射4.2.1 SO(3)上的指数映射罗德里格斯公式推导 4.2.2 SE(3) 上的指数映射SO(3),SE(3),so(3),se(3)的对应关系 4.3 李代数求导与扰动模型4.3.2 SO(3)上的李代数求导…...
【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--笔记
0. 内容 T1. 参考SLAM14讲P247直接可写,注意 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1,ξ2之间有约束(关系)。 套用舒尔补公式: marg掉 ξ 1 \xi_1 ξ1之后,信息被传递到 L 1 和 L 2 L_1和L_2 L1和L2之间了。 T2....
mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印
动态加载dll库 h文件中添加 #include "mydll.h" #ifdef UNICODE //区分字符集 #define LoadLibrary LoadLibraryW #else #define LoadLibrary LoadLibraryA #endif // !UNICODEtypedef double(*mydllPtr)(int, int);类内添加: mydllPtr m_mydll; cpp…...
索尼 toio™应用创意开发征文|检测工业平台震动
虽然索尼toio Q宝机器人主要是为儿童教育娱乐开发的,但我认为它在工业等领域也有一定应用潜力。例如,工业领域经常会有某些平面在实际作业中持续震动,导致零件过疲劳、平台失去稳定等问题。而这样的平台往往位于机器内部,从外部很…...
【已解决】 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘.
问题描述 团队都是用mac,只有我自己是windows,启动项目一直报错 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘. 但我不能因为自己的问题去改团队配置,也尝试过该vscode配置默认是LF还是报错 思路 看文章vscode如何替换所有文件的…...
Java8 Lambda.stream.sorted() 方法使用浅析分享
文章目录 Java8 Lambda.stream.sorted() 方法使用浅析分享sorted() 重载方法一升序降序 sorted() 重载方法二升序降序多字段排序 mock代码 Java8 Lambda.stream.sorted() 方法使用浅析分享 本文主要分享运用 Java8 中的 Lambda.stream.sorted方法排序的使用! sorted…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
