有的時候我們需要在自己的產品中檢測<高級安全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);