//開啟服務、開啟防火牆
public void OpenFileWall()
{
// 1. 判斷當前系統為XP或Win7
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"Software\\Microsoft\\Windows NT\\CurrentVersion");
var VersionName = rk.GetValue("ProductName").ToString();
rk.Close();
RegistryKey key;
//獲取防火牆服務名稱
var ServicerName = "";
if (VersionName.Contains("XP"))
{
ServicerName = "SharedAccess";
key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\\CurrentControlSet\\Services\\SharedAccess", true);
}
else
{
ServicerName = "MpsSvc";
key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\\CurrentControlSet\\Services\\MpsSvc", true);
}
// 2. 判斷防火牆啟動類型是否為禁止,若為禁止設置其為自動
var StartIndex = key.GetValue("Start").ToString();
if (StartIndex == "4")
{
ProcessStartInfo objProInfo = new ProcessStartInfo();
objProInfo.FileName = "cmd.exe";
objProInfo.CreateNoWindow = false;
objProInfo.WindowStyle = ProcessWindowStyle.Hidden;
objProInfo.Arguments = "/c sc config " + ServicerName + " start= " + "auto";
Process.Start(objProInfo);
//掛起線程1s后啟動服務
System.Threading.Thread.Sleep(1000);
}
key.Close();
// 3. 判斷防火牆服務是否啟動
ServiceController sc = new ServiceController(ServicerName);
if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || (sc.Status.Equals(ServiceControllerStatus.StopPending)))
{
sc.Start();
//掛起線程1s后開啟防火牆
System.Threading.Thread.Sleep(1000);
}
// 4.開啟防火牆
if (VersionName.Contains("XP"))
{
RegistryKey rekey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile", true);
var Enablefilewall = rekey.GetValue("EnableFirewall").ToString();
if (Enablefilewall == "0")
{
rekey.SetValue("EnableFirewall", 1);
}
rekey.Close();
}
else
{
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
// 啟用<高級安全Windows防火牆> - 專有配置文件的防火牆
firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, true);
// 啟用<高級安全Windows防火牆> - 公用配置文件的防火牆
firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, true);
}
}
//關閉防火牆
public void CloseFileWall()
{
// 1. 判斷當前系統為XP或Win7
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"Software\\Microsoft\\Windows NT\\CurrentVersion");
var VersionName = rk.GetValue("ProductName").ToString();
rk.Close();
// 2.關閉防火牆
if (VersionName.Contains("XP"))
{
RegistryKey rekey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile", true);
var Enablefilewall = rekey.GetValue("EnableFirewall").ToString();
if (Enablefilewall == "1")
{
rekey.SetValue("EnableFirewall", 0);
}
rekey.Close();
}
else
{
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
// 禁用<高級安全Windows防火牆> - 專有配置文件的防火牆
firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, false);
// 禁用<高級安全Windows防火牆> - 公用配置文件的防火牆
firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, false);
}
}
//當檢測不滿足條件,阻止所有訪問,只允許本程序運行
public void UnAllowOpenFW()
{
//判斷系統屬於xp還是win7
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"Software\\Microsoft\\Windows NT\\CurrentVersion"))
{
var VersionName = rk.GetValue("ProductName").ToString();
if (VersionName.Contains("XP"))
{
// 1. 創建一個認證程序類的實例
INetFwAuthorizedApplication Fwapp = (INetFwAuthorizedApplication)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication"));
Fwapp.Name = "360安全瀏覽器";
//Fwapp.Name = Application.ProductName;
Fwapp.ProcessImageFileName = "C:\\Documents and Settings\\Administrator\\Application Data\\360se6\\Application\\360se.exe";
//Fwapp.ProcessImageFileName = Application.ExecutablePath;
//是否啟用
Fwapp.Enabled = true;
// 2. 創建firewall管理類的實例 ,添加程序到防火牆例外
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Fwapp);
}
else
{
// 1. 創建實例,阻止所有的出站連接
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
//啟用或禁用<高級安全Windows防火牆> - 專有配置文件的出站連接
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
//啟用或禁用<高級安全Windows防火牆> - 公用配置文件的出站連接
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
// 2. 創建本程序出站規則,只運行本程序的連接。
INetFwRule2 OutBoundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
OutBoundRule.Name = "360安全瀏覽器";
//OutBoundRule.Name = Application.ProductName;
OutBoundRule.Description = "360安全瀏覽器";
//程序路徑
OutBoundRule.ApplicationName = "C:\\Users\\Administrator\\AppData\\Roaming\\360se6\\Application\\360se.exe";
//OutBoundRule.ApplicationName = Application.ExecutablePath;
OutBoundRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
OutBoundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
OutBoundRule.Enabled = true;
// 3.添加出站規則
firewallPolicy.Rules.Add(OutBoundRule);
}
}
}
//檢測滿足條件,開啟所有訪問
public void AllowOpenFW()
{
//判斷系統屬於xp還是win7
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"Software\\Microsoft\\Windows NT\\CurrentVersion"))
{
var ApplicationName = "360安全瀏覽器";
// var ApplicationName = Application.ProductName;
var VersionName = rk.GetValue("ProductName").ToString();
if (VersionName.Contains("XP"))
{
// 創建firewall管理類的實例 ,刪除添加程序到防火牆例外
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(ApplicationName);
}
else
{
// 1. 創建實例,允許所有程序的連接。
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
//啟用或禁用<高級安全Windows防火牆> - 專有配置文件的出站連接
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, NET_FW_ACTION_.NET_FW_ACTION_ALLOW);
//啟用或禁用<高級安全Windows防火牆> - 公用配置文件的出站連接
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, NET_FW_ACTION_.NET_FW_ACTION_ALLOW);
// 2. 刪除本程序的出站規則刪除規則
firewallPolicy.Rules.Remove(ApplicationName);
}
}
}