阅读防火墙设置以查看在 Windows 上使用 c# 的应用程序允许哪些配置文件

Vic*_*ann 3 c# windows windows-firewall

我正在尝试以编程方式读取允许应用程序通过防火墙的配置文件。我一直在使用以下 c# 代码:

string inputname  = "TestFirewallUpdateSettings";
    private void button1_Click(object sender, EventArgs e)
    {
        INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
        Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));

        INetFwRule firewallRule = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => x.Name == inputname).FirstOrDefault();

        richTextBox1.Text +=  firewallRule.Profiles.ToString();

    }
Run Code Online (Sandbox Code Playgroud)

返回的值是一个返回的整数值,如下所示:

https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.common.inetfwrule.profiles(v=vs.120).aspx

现在我想知道是否允许域、公共或私人配置文件。我的返回值从 4 到 2147483647 到处都是,我认为它是以某种方式编码的,但是我找不到任何解释说明输出的实际含义。有人可以让我知道在哪里可以找到这些信息。

Vic*_*ann 6

我想我通过几次反复试验找到了答案。

firewallRule.Profiles() 的输出是一个 int 值。

此图像是允许程序的防火墙的 GUI 版本

所以输出值为:

域 + 私有 + 公共 = 输出值

如果启用了这些值,则数学看起来像:

1 + 2 + 4 = 7

所以它只是整数值的前 3 位。上图应该是:

1 + 4 = 5

由于未启用专用网络,因此不会添加 2。

如果找不到您要查找的防火墙,则是找到 2147483647 值时(最大正 int32 值)