//開啟服務、開啟防火牆 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); } } }