Click here to Skip to main content
15,867,835 members
Articles / Programming Languages / Visual Basic
Article

Programmatically disable/enable Windows firewall

Rate me:
Please Sign up or sign in to vote.
4.34/5 (15 votes)
24 Jan 2007CPOL 91.4K   39   12
This article teaches you how to disable and enable your Windows firewall programmatically.

Introduction

This article teaches you how to disable and enable your Windows firewall programmatically.

Setup

  • Create a new Windows Application project.
  • Click on Project->Add Reference and add the following files:
    • Click Browse tab -> Add C:\windows\system32\Hnetcfg.dll.
    • Click COM tab -> Add NetFwTypeLib.

Requirements

Currently, this only works with Windows XP SP2. If you need support for this in Vista, add Wfapi.dll.

Source

VB
Imports System
Imports NetFwTypeLib

' Provides access to the firewall settings for a computer.
Public Function GetFwMgr() As NetFwTypeLib.INetFwMgr
    Dim oINetFwMgr As NetFwTypeLib.INetFwMgr
    Dim NetFwMgrObject As Object
    Dim NetFwMgrType As Type

    ' Use the COM CLSID to get the associated .NET System.Type
    NetFwMgrType = Type.GetTypeFromCLSID( _
     New Guid("{304CE942-6E39-40D8-943A-B913C40C9CD4}"))

    ' Create an instance of the object
    NetFwMgrObject = Activator.CreateInstance(NetFwMgrType)
    oINetFwMgr = NetFwMgrObject

    Return oINetFwMgr
End Function


' Provides access to the firewall settings profile.
Public Function GetProfile() As NetFwTypeLib.INetFwProfile

    Dim oINetPolicy As NetFwTypeLib.INetFwPolicy
    Dim oINetFwMgr As NetFwTypeLib.INetFwMgr

    oINetFwMgr = GetFwMgr()

    oINetPolicy = oINetFwMgr.LocalPolicy
    Return oINetPolicy.CurrentProfile

End Function

' Enable windows firewall.
Public Sub ActivateFirewall()
    Dim fwProfile As NetFwTypeLib.INetFwProfile
    fwProfile = GetProfile()
    fwProfile.FirewallEnabled = True
End Sub

' Disable windows firewall.
Public Sub DisableFirewall()
    Dim fwProfile As NetFwTypeLib.INetFwProfile
    fwProfile = GetProfile()
    fwProfile.FirewallEnabled = False
End Sub

' Firewall state || False = Disabled - True = Enabled.
Public Function FirewallEnabled() As Boolean
    Dim fwProfile As NetFwTypeLib.INetFwProfile
    fwProfile = GetProfile()
    Return fwProfile.FirewallEnabled
End Function

' Enable firewall on Form_Load.
Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
    If FirewallEnabled() = False Then
        ActivateFirewall()
    Else
        DisableFirewall()
    End If
    MessageBox.Show("Firewall enabled: " & FirewallEnabled())
End Sub

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Norway Norway
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
JalalAldeen26-Apr-13 21:43
JalalAldeen26-Apr-13 21:43 
Questionfirewall settings Pin
Kanimozhikannanthasan2-Mar-11 0:59
Kanimozhikannanthasan2-Mar-11 0:59 
GeneralMy vote of 5 Pin
theMadCoder10-Dec-10 8:17
theMadCoder10-Dec-10 8:17 
NewsHere it is in C# Pin
theMadCoder10-Dec-10 4:25
theMadCoder10-Dec-10 4:25 
using System;
using System.Collections.Generic;
using System.Text;
using NetFwTypeLib;

namespace Firewall_Library
{
public class FireWall
{
private static Type _NetFwMgrType;
private static Type NetFwMgrType
{
get
{
if (_NetFwMgrType == null)
{
_NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
}
return _NetFwMgrType;
}
}

private static INetFwMgr _Mgr;
private static INetFwMgr Mgr
{
get
{
if (_Mgr == null)
{
_Mgr = Activator.CreateInstance(NetFwMgrType) as INetFwMgr;
}
return _Mgr;
}
}

/// <summary>
/// Enabled flag of the Firewall
/// </summary>
public static bool Enabled
{
get
{
bool Firewallenabled = Mgr.LocalPolicy.CurrentProfile.FirewallEnabled;
return Firewallenabled;
}
set
{
Mgr.LocalPolicy.CurrentProfile.FirewallEnabled = value;
}
}

/// <summary>
/// Create interface for port
/// </summary>
/// <returns></returns>
public static INetFwOpenPort CreateINetFwOpenPort()
{
Type TportClass = Type.GetTypeFromProgID("HNetCfg.FWOpenPort");
INetFwOpenPort port = Activator.CreateInstance(TportClass) as INetFwOpenPort;
return port;
}


public static INetFwAuthorizedApplication CreateINetFwAuthorizedApplication()
{
Type TApplicationClass = Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication");
INetFwAuthorizedApplication app = Activator.CreateInstance(TApplicationClass) as INetFwAuthorizedApplication;
return app;
}

/// <summary>
/// Obtain list of Authorized Ports
/// </summary>
public static INetFwOpenPorts AuthorizedPorts
{
get { return Mgr.LocalPolicy.CurrentProfile.GloballyOpenPorts; }
}

/// <summary>
/// Obtain List of Authorized Applications
/// </summary>
public static INetFwAuthorizedApplications AuthorizedApplications
{
get { return Mgr.LocalPolicy.CurrentProfile.AuthorizedApplications; }
}
}
}




to use this
Listing ports
INetFwOpenPorts ports = FireWall.AuthorizedPorts;
System.Collections.IEnumerator enumerate;
if (ports != null)
{
enumerate = ports.GetEnumerator();
if (enumerate != null)
{
Console.WriteLine("Authorized Ports");
while (enumerate.MoveNext())
{
INetFwOpenPort port = enumerate.Current as INetFwOpenPort;
if (port != null)
{
Console.Write(" ");
Console.WriteLine(string.Format("{0} ", port.Port));
}
}
}
}

listing apps
INetFwAuthorizedApplications applications = FireWall.AuthorizedApplications;
if (applications != null)
{
System.Collections.IEnumerator enumerate;
enumerate = applications.GetEnumerator();
Console.WriteLine("Authorized Applications");
while (enumerate.MoveNext())
{
INetFwAuthorizedApplication app = enumerate.Current as INetFwAuthorizedApplication;
if (app != null)
{
Console.Write(" ");
Console.WriteLine(string.Format("{0} ", app.Name));
}
}
}

adding a port

INetFwOpenPort _PortToTest = FireWall.CreateINetFwOpenPort();
if (_PortToTest != null)
{
_PortToTest.Port = 7657;
_PortToTest.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
_PortToTest.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL;
_PortToTest.Name = "Test";

INetFwOpenPorts ports = MOAEC_FireWall.AuthorizedPorts;
if (ports != null)
{
ports.Add(_PortToTest);
}
}



adding an application
INetFwAuthorizedApplication _ApplicationToTest = MOAEC_FireWall.CreateINetFwAuthorizedApplication();
if (_ApplicationToTest != null)
{

Process p = Process.GetCurrentProcess();
_ApplicationToTest.ProcessImageFileName = p.MainModule.FileVersionInfo.FileName;
_ApplicationToTest.Name = p.ProcessName;

INetFwAuthorizedApplications applications = MOAEC_FireWall.AuthorizedApplications;
if (applications != null)
{
applications.Add(_ApplicationToTest);
}
}
Generalfirewall setting Pin
Bhim Prakash Singh30-Oct-09 23:55
Bhim Prakash Singh30-Oct-09 23:55 
Generalgood article Pin
Donsw25-Oct-09 16:12
Donsw25-Oct-09 16:12 
GeneralEnable Disable Widows Firewall for Remote System. Pin
ganesh1984051513-Nov-08 0:09
ganesh1984051513-Nov-08 0:09 
Generalerror in code Pin
oudfliurquidqw058fh16-Sep-08 23:34
oudfliurquidqw058fh16-Sep-08 23:34 
GeneralStraight to the point article Pin
nnm2-Sep-08 13:55
nnm2-Sep-08 13:55 
QuestionWhy it don't work?? Pin
us017396-Feb-07 21:45
us017396-Feb-07 21:45 
GeneralAnother article on the same topic ... Pin
Tony Selke29-Jan-07 9:04
Tony Selke29-Jan-07 9:04 
Generalgood work! Pin
Tenschman27-Jan-07 3:04
Tenschman27-Jan-07 3:04 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.