Добавление правила брандмауэра, не добавляющего для сети домена

Я пытаюсь добавить приложение в брандмауэр. Он работает нормально, но он проверяет только опцию "Public". Я хочу добавить правило брандмауэра для "Домен".

Вот мой код.

private const string ClsidFirewallManager = "{304CE942-6E39-40D8-943A-B913C40C9CD4}";

private INetFwMgr _firewallManager;
private INetFwMgr FirewallMgr
{
 get { return _firewallManager ?? (_firewallManager = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid(ClsidFirewallManager)))); }
}

private INetFwPolicy FirewallPolicy
{
 get { return FirewallMgr.LocalPolicy; }
}

private INetFwProfile _firewallProfile;
private INetFwProfile FirewallProfile
{
 get { return _firewallProfile ?? (_firewallProfile = FirewallPolicy.CurrentProfile); }
}


public void AddApplication(string imageFileName, string registerName)
{
 if (!IsAppEnabled(imageFileName))
 {
 var firewallApplicatoins = FirewallProfile.AuthorizedApplications;
 var type = Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication");
 var firewallApplication = Activator.CreateInstance(type) as INetFwAuthorizedApplication;

 firewallApplication.ProcessImageFileName = imageFileName;
 firewallApplication.Name = registerName;
 firewallApplication.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_LOCAL_SUBNET; ---> Here it adds to public, whatever the value for enum is.
 firewallApplication.Enabled = true;

 firewallApplicatoins.Add(firewallApplication);
 }
}

Я пошел по этой ссылке.

http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/10c6ff4b-7***-4351-a3d8-a716d8831a66/add-c-application-to-firewall-exception-list-of-windows-7? форум = windowssecurity и проф = требуемая

Теперь здесь, независимо от того, что я присваиваю значение Scope, правило брандмауэра добавляется только для общедоступной сети. Я хочу добавить его для сети домена.

firewallApplication.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_LOCAL_SUBNET;

Что я делаю неправильно здесь. Я использую Windows 8.

1 ответ

У меня проблема. Мой существующий код работает только в Windows XP. Для Vista или выше он работал не очень хорошо. Для Vista мне нужно работать со следующей версией брандмауэра.

Вот код.

var firewallRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));

firewallRule.Name = registerName;
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
firewallRule.Enabled = true;
firewallRule.InterfaceTypes = "All";

var rules = VistaFirewallPolicy.Rules;
rules.Add(firewallRule);

Этот код добавит правило брандмауэра в домен, закрытый и открытый.

licensed under cc by-sa 3.0 with attribution.