用C#来控制高级安全Windows防火墙
有的时候我们需要在自己的产品中检测<高级安全Windows防火墙>的状态,并有可能需要加入一些规则甚至需要关闭掉高级安全Windows防火墙。
下面就告诉如何来做:
<高级安全Windows防火墙>的状态界面如下:
已测试环境 Windows Server 2008 Enterprise X64 / Windows Server 2008 R2 Enterprise
PS: 我只关注于服务器环境,:)
![]()
![]()
第一步:添加对于Windows Firewall with Advanced Security APIs的COM引用INetFwPolicy2
![]()
第二步:引入需要的命名空间
using NetFwTypeLib;
第三步:上代码,自己看了
//启用或禁用<高级安全Windows防火墙>,适用于Windows Vista/7/2008 R2(x86/x64)
//来自 Blog.WebServerGuard.Net
bool Net_FW_Domain_Status = false;
bool Net_FW_Public_Status = false;
bool Net_FW_Private_Status = false;
Type NetFwMgrTypeWithAdSecurity = Type.GetTypeFromProgID("HNetCfg.FwPolicy2", false);
INetFwPolicy2 mgrWithAdSecurity = (INetFwPolicy2 )Activator.CreateInstance(NetFwMgrTypeWithAdSecurity);
//启用或禁用<高级安全Windows防火墙> - 所有配置文件,适用于Windows Vista/7/2008 R2
//mgr2.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL, false);
//启用或禁用<高级安全Windows防火墙> - 域配置文件,适用于Windows Vista/7/2008 R2
mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, false);
//启用或禁用<高级安全Windows防火墙> - 公用配置文件,适用于Windows Vista/7/2008 R2
mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, true );
//启用或禁用<高级安全Windows防火墙> - 专有配置文件,适用于Windows Vista/7/2008 R2
mgrWithAdSecurity.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, false);
//检测<高级安全Windows防火墙>的状态
//来自 Blog.WebServerGuard.Net
Net_FW_Domain_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN);
MessageBox.Show("Net_FW_Domain_Status:" + Net_FW_Domain_Status.ToString ());
Net_FW_Public_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC);
MessageBox.Show("Net_FW_Public_Status:" + Net_FW_Public_Status.ToString());
Net_FW_Private_Status=mgrWithAdSecurity.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE);
MessageBox.Show("Net_FW_Private_Status:" + Net_FW_Private_Status.ToString());
域配置文件、专有配置文件、公用配置文件适用范围请自行查阅资料。
更多功能可以参考:
《Using Windows Firewall with Advanced Security》 - http://msdn.microsoft.com/en-us/library/aa366418(VS.85).aspx
上面的资料给出了C/C++/VBScript的示例代码,很容易对应到相应的C#代码
如何 添加 和 删除 允许通过防火墙的程序进入例外列表

本篇,我们用到了COM引用,因为不使用COM引用的话,操作太过繁琐了 
一、 添加 COM 引用
在引用里,选择 COM 页, 找到 NetFwTypeLib , 确定即可
二、 引入命名空间
using NetFwTypeLib;
三、 添加允许通过防火墙的例外程序
//创建firewall管理类的实例
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); //创建一个认证程序类的实例
INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance(
Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication")); //在例外列表里,程序显示的名称
app.Name = "自定义"; //程序的决定路径,这里使用程序本身
app.ProcessImageFileName = Application.ExecutablePath; //是否启用该规则
app.Enabled = true; //加入到防火墙的管理策略
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);
四、删除一个例外 列表 里的程序
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//参数为程序的绝对路径
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(Application.ExecutablePath);
用C#来控制高级安全Windows防火墙的更多相关文章
- 高级安全Windows防火墙概述以及最佳实践
本文简单介绍Windows防火墙的概念,给出使用场景并列出了常见的防火墙操作. 简介 在Windows NT6.0之后微软推出了高级安全Windows防火墙(简称WFAS),高级安全Windows防火 ...
- 【转】玩玩你的Windows防火墙——穿透与防御
前言:在防火墙专区,我经常看见朋友们讨论,“某某防火墙的性能如何”,亦或是,“某某防火墙的防御能力如何”.实际上,一个防火墙所履行的基本职责便是“网络访问控制”,即放行我们允许的通信,阻止我们未允许的 ...
- 如何配置Windows 防火墙,允许SQL Server的远程连接
一.如何找到SQL Server正在侦听的TCP端口,可以按一下步骤: 1.打开 SQL Server 配置管理器中,从开始->所有程序-> Microsoft SQL Server 20 ...
- 针对 SQL Server 2008 在Windows Server 2008上的访问配置 Windows 防火墙
现在Windows Server 2008 服务器用的越来越多,2008的防火墙比2003的有了很大的增强,安全性有了更大的提高. 甚至80端口的出站默认都是被关闭的.所以如果在2008Server上 ...
- 配置Windows 防火墙,允许SQL Server的远程连接
在运行SQL Server的服务器上,我们要找到哪些是SQL Server正在侦听的端口,并将其添加到Windows防火墙的入站例外. 首先,我们需要添加 SQL Server 服务侦听 Window ...
- 服务器安全策略之《启用Windows 防火墙情况下配置允许SQL Server远程连接》
为了服务器的安全,通常情况下我们需要启用Windows 防火墙,然而在启用了Windows 防火墙后会发现会引发一系列的问题,比如无法通过本地远程服务器桌面.无法在本地远程连接SQL Server等, ...
- 利用ftp端口设置,浅谈windows防火墙之应用+ftp直接资源管理器登陆
win服务器的版本是不错的.防火墙也比较能用.server-u 6.4则是比较稳定.兼容性好的的版本,所以很多人在用 1.服务器为了安全,一般开启windows高级防火墙,在网络连接处右键鼠标,有弹出 ...
- windows防火墙打不开的处理办法
一.防火墙配置出错 开始-->运行-->gpedit.msc 这时,打开了组策略 在左面分级展开 计算机配置-->管理模板-->网络-->网络连接-->Window ...
- windows防火墙无法启动,服务不存在
系统的防火墙无法启动,系统服务里面也没有防火墙的服务,用下面第一种方法,导 入注册表,重启服务器,在服务里面有防火墙的服务了,然后启动就好了,需要重新配置防火墙 在控制面板中启动防火墙的时候提示无法识 ...
随机推荐
- 怎么查看Eclipse的版本信息
工具/原料 Eclipse版本信息查看 第一种方法 1 找到Eclipse的解压目录就是你的Eclipse.exe 所在的目录 2 找到 .eclipseproduct 文件双击打开 3 如图 ...
- 项目中gulp使用发生的错误及解决
在项目开发中,执行gulp css来生成合成的css文件时,报如下错误 Error: Cannot find module 'browserslist' 解决方法: npm install brows ...
- 26、生鲜电商平台-RBAC系统权限的设计与架构
说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想 ...
- OpenStack基础知识-tox的详解介绍
1.tox简介 tox是通用的虚拟环境管理和测试命令行工具.tox能够让我们在同一个Host上自定义出多套相互独立且隔离的python环境,每套虚拟环境中可能使用了不同的 Python 拦截器/环境变 ...
- laravel 导出插件
转发:https://blog.csdn.net/gu_wen_jie/article/details/79296470 版本:laravel5 php 5.6 安装步骤: 一.安装插件 ①.首先在L ...
- 对各种lca算法的理解
1.RMQ+ST 首先注意这个算法的要素:结点编号,dfs序,结点深度. 首先dfs,求出dfs序,同时求出每个结点的深度.然后st算法,维护深度最小的结点编号(dfs序也可以,因为他们俩可以互相转换 ...
- 2017-10-15 NOIP模拟赛
Stack #include<iostream> #include<cstdio> #define mod 7 using namespace std; ][],n; int ...
- CF447B DZY Loves Strings 贪心
DZY loves collecting special strings which only contain lowercase letters. For each lowercase letter ...
- [题解](排列组合)luogu_P3223排队
把老师和女生插到男生中间,先对男生排列:A(n,n),然后把老师插到n+1个空里:A(n+1,2),然后放入女生:A(n+3,m) 但是少考虑了老师之间由1个女生分开的情况,所以把三个人看作一个整体, ...
- haoi2018奇怪的背包题解
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5302 对于一个物品,设它体积为v,那么,在背包参数为p的情况下,它能达到gcd(v,p ...