如何使用C#来控制<高级安全Windows防火墙>(Windows Vista/2008 R2/7-x86x64)
同步更新:Web应用安全观察站 http://blog.WebServerGuard.Net/
有的时候我们需要在自己的产品中检测<高级安全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#代码