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

发布于 2024-11-01 01:50:30 字数 434 浏览 1 评论 0原文

我四处搜寻,也有类似的问题,但是,没有人谈论如何向“所有配置文件”(Windows 7,Vista/Windows Server 2008 上的又名“任何配置文件”)添加例外。互联网上的示例仅讨论添加到当前配置文件。

原因是我的一台虚拟机有问题:Windows 2008 x86,当前的防火墙配置文件是域,并且我的应用程序已添加到域的例外列表中。 (防火墙设置为默认设置:阻止所有不在例外列表中的入站呼叫。) 但是,入站呼叫仍会被阻止,除非: 1. 关闭该虚拟机上的防火墙。 2.手动将我的应用程序的规则配置文件更改为“任何”

这非常令人困惑,因为我认为只有活动配置文件应该是“活动的”并且应该起作用,无论其他配置文件是否阻止我的应用程序入站调用。

我正在使用 XPSP2 INetFwMgr 接口来添加缺乏“任何”配置文件支持的例外。

我使用的是 C#,但任何带有示例的语言都将受到赞赏。

I have searched around and there are similar questions on SO, however, no one talks about how to add exception to "All Profile" (windows 7, AKA "Any Profile" on Vista/Windows Server 2008). Examples on internet talk about add to current profile only.

The reason for this is I have a problem with one of my virtual machine: windows 2008 x86, current firewall profile is Domain, and my application is added to Exception list of Domain. (Firewall setting is as default: block any inbound calls that are not in exception list.)
However, inbound calls are still blocked unless :
1. turn off firewall on that this virtual machine.
2. manually change rule profile of my application to "any"

It is very confusing as I thought only active profile should be "active" and should be functional, no matter other profiles are blocking my application inbound calls.

I am using XPSP2 INetFwMgr interface to add exceptions which is lacking of "any" profile support.

I am using c# but any language with example will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十雾 2024-11-08 01:50:30

您可以尝试这样的操作:

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 的引用

You may try something like this:

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);

    }
  }
}

For sake of completeness, add reference to c:\Windows\System32\FirewallAPI.dll

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文