以编程方式将应用程序添加到所有配置文件Windows防火墙(Vista+)

本文关键字:Windows 配置文件 防火墙 Vista+ 方式 编程 应用程序 添加 | 更新日期: 2023-09-27 17:50:05

我已经搜索了周围,有类似的问题在SO,然而,没有人谈论如何添加例外"所有配置文件"(windows 7,又名"任何配置文件"在Vista/windows Server 2008)。网络上的例子只讨论添加到当前配置文件。

原因是我的一个虚拟机有问题:windows 2008 x86,当前防火墙配置文件是Domain,我的应用程序被添加到Domain的例外列表中。(防火墙设置为默认设置:阻止任何不在异常列表中的入站呼叫。)但是,入站呼叫仍然被阻塞,除非:1. 关闭该虚拟机上的防火墙。2. 手动更改应用程序的规则配置文件为"any"

这是非常令人困惑的,因为我认为只有活动配置文件应该是"活动的",应该是功能性的,无论其他配置文件阻止我的应用程序入站调用。

我使用XPSP2 INetFwMgr接口来添加缺乏"任何"配置文件支持的异常。

我正在使用c#,但任何语言的例子将被欣赏。

以编程方式将应用程序添加到所有配置文件Windows防火墙(Vista+)

您可以尝试这样做:

using System;
using NetFwTypeLib;
namespace FirewallManager
{
  class Program
  {
    static void Main(string[] args)
    {
        INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
        firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
        firewallRule.Description = "Allow notepad";
        firewallRule.ApplicationName = @"C:'Windows'notepad.exe";
        firewallRule.Enabled = true;
        firewallRule.InterfaceTypes = "All";
        firewallRule.Name = "Notepad";
        INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
            Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
        firewallPolicy.Rules.Add(firewallRule);
    }
  }
}

为了完整起见,请添加c:'Windows'System32'FirewallAPI.dll