Click here to Skip to main content
15,878,871 members
Articles / Programming Languages / C#
Tip/Trick

Allow/Block a Program

Rate me:
Please Sign up or sign in to vote.
4.93/5 (6 votes)
29 Nov 2012CPOL 27.7K   2.1K   13   2
This is a quick way to allow or disallow a program through the firewall.

Introduction

This is a single method that allows/blocks an executable through the firewall. I wrote this method for one of my applications and decided to post here for everyone's good.

Background

The idea here is to use the NetFwTypeLib located in (C:\windows\system32\FirewallAPI.dll) to add a rule that allows/blocks the executable with the specified path from establishing a connection of any type.

Using the Code

First, the FirewallAPI.dll must be added to references and NetFwTypeLib to usings.

Then, you can use the following method:

C#
/// <summary>
/// Adds or removes a firewall rule.
/// </summary>
/// <param name="path">The path to the executable.</param>
/// <param name="d">The affected connection type.</param>
/// <param name="fwaction">Rule action.</param>
/// <param name="action">"Add (1) or 
/// remove (0) the specified rule."</param>
private void FWRule(string path, NET_FW_RULE_DIRECTION_ d, 
		NET_FW_ACTION_ fwaction, string action)
{
    try
    {
        INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(
        Type.GetTypeFromProgID("HNetCfg.FWRule"));
        firewallRule.Action = fwaction;
        firewallRule.Enabled = true;
        firewallRule.InterfaceTypes = "All";
        firewallRule.ApplicationName = path;
        firewallRule.Name = "CSwitch: " + Path.GetFileName(path);
        INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance
        (Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
            firewallRule.Direction = d;
            if (action == "1") firewallPolicy.Rules.Add(firewallRule);
            else firewallPolicy.Rules.Remove(firewallRule.Name);
    }
    catch (Exception ex) { MessageBox.Show(ex.Message, "ERROR"); }}} }   

Example

C#
FWRule(@"C:\test.exe", NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT, 
NET_FW_ACTION_.NET_FW_ACTION_BLOCK, "1"); 

This will block test.exe from making any outgoing connections.

Points of Interest

While writing this, I noticed that trying to use the same INetFwRule variable multiple times could throw a CATASTROPHIC FAILURE (Access Denied) exception.

License

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


Written By
Student
Egypt Egypt
I have taken programming as a hobby ever since I was a child. I'm currently a Computer & Communication BSc undergraduate.

Comments and Discussions

 
QuestionThank You Pin
Tim Tatum7-May-15 9:21
Tim Tatum7-May-15 9:21 
QuestionIf you are getting a "Value does not fall within the expected range." compile error Pin
hooger201720-Jun-14 12:12
hooger201720-Jun-14 12:12 

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.