Программно добавить приложение во все профили Windows Firewall (Vista +)

Я искал, и есть похожие вопросы по SO, однако никто не говорит о том, как добавить исключение в «All Profile» (Windows 7, AKA «Any Profile» в Vista / Windows Server 2008). Примеры в Интернете говорят только о добавлении в текущий профиль.

Причина в том, что у меня проблема с одной из моих виртуальных машин: windows 2008 x86, текущий профиль брандмауэра - домен, а мое приложение добавлено в список исключений домена. (Настройка брандмауэра по умолчанию: блокировать любые входящие вызовы, не входящие в список исключений.) Однако входящие вызовы по-прежнему блокируются, если: 1. не выключить брандмауэр на этой виртуальной машине. 2. вручную изменить профиль правила моего приложения на «любой»

Это очень сбивает с толку, поскольку я думал, что только активный профиль должен быть «активным» и должен работать, независимо от того, что другие профили блокируют входящие вызовы моего приложения.

Я использую интерфейс XPSP2 INetFwMgr для добавления исключений, в которых отсутствует поддержка «любого» профиля.

Я использую C #, но я буду признателен за любой язык с примерами.


person Yuan    schedule 12.04.2011    source источник


Ответы (1)


Вы можете попробовать что-то вроде этого:

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

person manojlds    schedule 13.04.2011
comment
Я пробовал это, но когда я вижу правило брандмауэра в системном брандмауэре, значит, к правилу не привязан исполняемый путь, почему это так? - person fhnaseer; 22.04.2014
comment
Что произойдет, если правило уже существует? Продолжает ли он добавлять? - person tmm1; 28.03.2018