2011-04-12 15 views
6

He buscado y hay preguntas similares en SO, sin embargo, nadie habla sobre cómo agregar excepción a "Todos los perfiles" (Windows 7, AKA "Any Profile" "en Vista/Windows Server 2008). Ejemplos de charla en internet sobre agregar al perfil actual solamente.Programáticamente agregar una aplicación a todos los perfiles Windows Firewall (Vista +)

La razón de esto es que tengo un problema con una de mi máquina virtual: Windows 2008 x86, el perfil de firewall actual es Dominio, y mi aplicación se agrega a la lista de excepciones de Dominio. (La configuración del Firewall es la predeterminada: bloquea cualquier llamada entrante que no esté en la lista de excepciones). Sin embargo, las llamadas entrantes siguen bloqueadas a menos que: 1. apague el cortafuegos en esta máquina virtual. 2. Cambie manualmente el perfil de regla de mi aplicación a "cualquiera"

Es muy confuso ya que pensé que solo el perfil activo debería estar "activo" y debería funcionar, sin importar que otros perfiles estén bloqueando las llamadas entrantes de mi aplicación.

Estoy usando la interfaz XPSP2 INetFwMgr para agregar excepciones que carecen de "cualquier" soporte de perfil.

Estoy usando C#, pero cualquier lenguaje con el ejemplo será apreciado.

Respuesta

8

Usted puede intentar algo como esto:

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

    } 
    } 
} 

Para mayor abundamiento, añadir una referencia a C: \ Windows \ System32 \ FirewallAPI.dll

+0

yo probamos este, pero cuando veo en la regla de cortafuegos firewall del sistema entonces no hay una ruta ejecutable adjunta a la regla, ¿por qué es así ?, –

Cuestiones relacionadas