Compruebe si hay firewalls de terceros en una máquina

Estoy trabajando en hacer un cheque para Firewalls. El siguiente código comprueba fácilmente el estado del Firewall de Windows predeterminado:

    INetFwMgr manager = GetFireWallManager();
    bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled;
    if (isFirewallEnabled == false)
    {
      Console.WriteLine("Firewall is not enabled.");
    }
    else
    {
      Consoe.WriteLine("Firewall is enabled.");
    }
    Console.ReadLine();

   private static INetFwMgr GetFireWallManager()
   {
     Type objectType = Type.GetTypeFromCLSID(new Guid(firewallGuid));
     return Activator.CreateInstance(objectType) as INetFwMgr;
   }

La pregunta entonces es: ¿Cómo puedo encontrar el estado de un Firewall que no sea de Windows? Si el Firewall está correctamente integrado, ¿funcionará igual la comprobación anterior o hay un método mejor para hacerlo? He revisado este post:Configuración de C # Windows Security Center y este post:C # - ¿Cómo verificar si el firewall externo está habilitado? pero ambos demostraron ser relativamente inútiles.

He estado buscando en la API de WMI pero hasta ahora es bastante confuso, y la documentación a través de MSDN no ha sido demasiado prometedora. También he intentado perder el tiempo conSelectQuery Pero hasta ahora no he tenido éxito. ¿Alguien puede ayudarme en un nuevo punto de partida o donde pueda encontrar una mejor documentación / instrucciones sobre los firewalls de terceros?

EDITAR: Actualmente estoy explorando más en WMI, específicamente la claseFirewallProduct como lo sugiere un post.

ACTUALIZACIÓN 2: He estado probando el siguiente fragmento de código:

  string wmiNameSpace = "SecurityCenter2";
  ManagementScope scope;
  scope = new ManagementScope(String.Format("\\\\{0}\\root\\{1}", "localhost", wmiNameSpace), null);
  scope.Connect();
  ObjectQuery query = new ObjectQuery("SELECT * FROM FirewallProduct");
  ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

Pero ejecutando esto resulta en el siguiente error:Exception Invalid namespace y apunta a la línea 39 (scope.Connect()). No me sorprendería en absoluto si simplemente omito un parámetro o formatee algo incorrectamente, simplemente no sé qué es.

ACTUALIZACIÓN 3 Cambiando deSecurityCenter2 aSecurityCenter todavia da lo mismoinvalid namespace error.

ACTUALIZACIÓN 4 Moví la aplicación de la consola a una caja diferente (win7 no winserver08r2) y se informó correctamente como se esperaba. Por lo tanto, puede ser un problema con la máquina virtual en la que actualmente he estado probando. El siguiente paso es analizar el estado activo / inactivo

Actualización 5 Fue probado en otra caja Server08 y el mismoinvalid namespace aparece el error UtilizandoSecurityCenter en lugar deSecurityCenter2 No resuelve el problema. ¿Hay alguna característica de seguridad subyacente que utiliza el sistema operativo Windows Server para evitar la manipulación indebida de firewalls, o el sistema operativo del servidor no incluye un conjunto de teclas específico de características de WMI?

Respuestas a la pregunta(1)

Su respuesta a la pregunta