I have been needing a set of classes to give me access to the settings for the Windows Firewall.  I did a quick search and didn't find much that would help me in my quest to view or manipulate these settings, so I ended up writing my own managed wrapper classes for the underlying COM objects.  I thought I would post my code here so that others can take advantage of the work I did.  Note that at this point I have only done cursory testing, so I don't promise that it is bug free.  Please let me know if you see any errors/improvements that need to be addressed.  Note that towards the bottom I have included a simple Main function that shows some sample usage.

using System;
using System.Collections;
using System.Text;
using System.Globalization;
using System.Security.Permissions;
using System.Security.Principal;
using System.ComponentModel;
using System.Runtime.InteropServices;

namespace WindowsFirewallTools
{


 [ComImport, ComVisible(false), Guid("304CE942-6E39-40D8-943A-B913C40C9CD4")]
    public class NetFwMgr {

    }

    [ComImport, ComVisible(false), Guid("F7898AF5-CAC4-4632-A2EC-DA06E5111AF2"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface INetFwMgr {
       
   INetFwPolicy LocalPolicy {get;}

   FirewallProfileType CurrentProfileType {get;}

   void RestoreDefaults();

         void IsPortAllowed(string imageFileName,
          IPVersion ipVersion,
          long portNumber,
          string localAddress,
          IPProtocol ipProtocol,
          [Out] out bool allowed,
          [Out] out bool restricted);

        void IsIcmpTypeAllowed(IPVersion ipVersion,
          string localAddress,
          byte type,
          [Out] out bool allowed,
          [Out] out bool restricted);
    }

 [ComImport, ComVisible(false), Guid("D46D2478-9AC9-4008-9DC7-5563CE5536CC"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwPolicy
 {

   INetFwProfile CurrentProfile{get;}
         INetFwProfile GetProfileByType(FirewallProfileType profileType);
 }

 [ComImport, ComVisible(false), Guid("174A0DDA-E9F9-449D-993B-21AB667CA456"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwProfile
 {

  
   FirewallProfileType Type {get;}
         bool FirewallEnabled {get;set;}
   bool ExceptionsNotAllowed {get;set;}
   bool NotificationsDisabled {get;set;}
   bool UnicastResponsesToMulticastBroadcastDisabled {get;set;}
   INetFwRemoteAdminSettings RemoteAdminSettings {get;}
         INetFwIcmpSettings IcmpSettings {get;}
   INetFwOpenPorts GloballyOpenPorts {get;}
   INetFwServices Services {get;}
   INetFwAuthorizedApplications AuthorizedApplications {get;}
       
      
 }

 [ComImport, ComVisible(false), Guid("D4BECDDF-6F73-4A83-B832-9C66874CD20E"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwRemoteAdminSettings
 {
         IPVersion IpVersion {get;set;}
        
   Scope Scope{get;set;}
       
   string RemoteAddresses{get;set;}
       
   bool Enabled {get;set;}
 }

 [ComImport, ComVisible(false), Guid("A6207B2E-7CDD-426A-951E-5E1CBC5AFEAD"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwIcmpSettings
 {
         bool AllowOutboundDestinationUnreachable{get;set;}
       
   bool AllowRedirect{get;set;}
       
   bool AllowInboundEchoRequest{get;set;}

   bool AllowOutboundTimeExceeded{get;set;}

   bool AllowOutboundParameterProblem{get;set;}
       
   bool AllowOutboundSourceQuench{get;set;}

   bool AllowInboundRouterRequest{get;set;}
  
   bool AllowInboundTimestampRequest{get;set;}
       
         bool AllowInboundMaskRequest{get;set;}

   bool AllowOutboundPacketTooBig{get;set;}
       
 }

 [ComImport, ComVisible(false), Guid("C0E9D7FA-E07E-430A-B19A-090CE82D92E2"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwOpenPorts
 {
         long Count {get;}
       
   void Add(INetFwOpenPort port);

   void Remove(long portNumber, IPProtocol ipProtocol);
       
   INetFwOpenPort Item(long portNumber, IPProtocol ipProtocol);
       
   System.Collections.IEnumerator _NewEnum{get;}
 }

 [ComImport, ComVisible(false), Guid("E0483BA0-47FF-4D9C-A6D6-7741D0B195F7"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwOpenPort
 {


  string Name{get;set;}
       
  IPVersion IpVersion{get;set;}
  
  IPProtocol Protocol{get;set;}

  long Port {get;set;}

  Scope Scope{get;set;}
  
  string RemoteAddresses{get;set;}
  
  bool Enabled{get;set;}
    
  bool BuiltIn {get;}
       
 }

 [ComImport, ComVisible(false), Guid("79649BB4-903E-421B-94C9-79848E79F6EE"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwServices
 {
         long Count {get;}
       
   INetFwService Item(ServiceType svcType);
       
         System.Collections.IEnumerator _NewEnum{get;}

 }

 [ComImport, ComVisible(false), Guid("79FD57C8-908E-4A36-9888-D5B3F0A444CF"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwService
 {
         string Name{get;}
       
   ServiceType Type{get;}

   bool Customized{get;}

   IPVersion IpVersion{get;set;}
  
   Scope Scope{get;set;}
  
   string RemoteAddresses{get;set;}

         bool Enabled{get;set;}
       
         INetFwOpenPorts GloballyOpenPorts {get;}

 }

 [ComImport, ComVisible(false), Guid("644EFD52-CCF9-486C-97A2-39F352570B30"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwAuthorizedApplications
 {
         long Count {get;}
       
   void Add(INetFwAuthorizedApplication port);

   void Remove(string imageFileName);
       
   INetFwAuthorizedApplication Item(string imageFileName);
       
   System.Collections.IEnumerator _NewEnum{get;}
 }

 [ComImport, ComVisible(false), Guid("EC9846B3-2762-4A6B-A214-6ACB603462D2")]
    public class NetFwAuthorizedApplication {

    }

 [ComImport, ComVisible(false), Guid("B5E64FFA-C2C5-444E-A301-FB5E00018050"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface INetFwAuthorizedApplication
 {
         string Name{get;set;}
       
   string ProcessImageFileName{get;set;}

   
   IPVersion IpVersion{get;set;}
  
   Scope Scope{get;set;}
  
   string RemoteAddresses{get;set;}

         bool Enabled{get;set;}
 }

    public enum FirewallProfileType
 {
  Domain = 0,
  Standard = 1,
  Current = 2,
  Max = 3
 }

    public enum IPVersion
 {
  IPv4 = 0,
  IPv6 = 1,
  IPAny = 2,
  IPMax = 3
 }
    public enum IPProtocol
 {
  Tcp= 6,
  Udp= 17
 }

 public enum Scope
 {
  All = 0,
  Subnet = 1,
  Custom = 2,
  Max = 3
 }

 public enum ServiceType
 {
  FileAndPrint = 0,
  UPnP = 1,
  RemoteDesktop = 2,
  None = 3,
  Max = 4
 
 }


#if COMPILE_MAIN 
 public class App {
  //a sample main application that shows the usage of these objects.
  public static void Main()
  {
   try {

    INetFwMgr mgr = (INetFwMgr)new NetFwMgr();

    Console.WriteLine("CurrentProfileType: " +mgr.CurrentProfileType);

    INetFwProfile profile = mgr.LocalPolicy.CurrentProfile;
    Console.WriteLine("FirewallEnabled: " + profile.FirewallEnabled);


    System.Collections.IEnumerator e = null;

    e = profile.AuthorizedApplications._NewEnum;


     

    Console.WriteLine("\r\n-----  Applications  -----  ");
    while (e.MoveNext()) {
     INetFwAuthorizedApplication app = e.Current as INetFwAuthorizedApplication;
     Console.WriteLine("\t{0}\r\n\t\tImageFilename={1}\r\n\t\tEnabled={2}\r\n\t\tIpVersion={3}\r\n\t\tScope={4}\r\n\t\tRemoteAddresses={5}",
           app.Name,
           app.ProcessImageFileName,
           app.Enabled,
           app.IpVersion,
           app.Scope,
           app.RemoteAddresses
          );
    }


    e = profile.Services._NewEnum;
    Console.WriteLine("\r\n-----  Services  -----  ");
    while (e.MoveNext()) {
     INetFwService service = e.Current as INetFwService;
     Console.WriteLine("\t{0}\r\n\t\tType={1}\r\n\t\tEnabled={2}\r\n\t\tIpVersion={3}"+
           "\r\n\t\tScope={4}\r\n\t\tcustomized={5}\r\n\t\tRemoteAddresses={6}",
           service.Name,
           service.Type,
           service.Enabled,
           service.IpVersion,
           service.Scope,
           service.Customized,
           service.RemoteAddresses
          );
    }

    e = profile.GloballyOpenPorts._NewEnum;
    Console.WriteLine("\r\n-----  Globally Open Ports  -----  ");
    while (e.MoveNext()) {
     INetFwOpenPort port = e.Current as INetFwOpenPort;
     Console.WriteLine("\t{0}\r\n\t\tIsBuiltIn={1}\r\n\t\tEnabled={2}\r\n\t\tIpVersion={3}"+
           "\r\n\t\tScope={4}\r\n\t\tProtocol={5}\r\n\t\tRemoteAddresses={6}",
           port.Name,
           port.BuiltIn,
           port.Enabled,
           port.IpVersion,
           port.Scope,
           port.Protocol,
           port.RemoteAddresses
          );
    }


   } catch (Exception ex) {
    Console.WriteLine(ex);
   }
  }
 }

#endif //COMPILE_MAIN
}