65.9K
CodeProject 正在变化。 阅读更多。
Home

允许/阻止程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (6投票s)

2012年11月30日

CPOL
viewsIcon

28980

downloadIcon

2216

这是一种通过防火墙允许或阻止程序的一种快速方法。

引言

这是一个允许/阻止可执行文件通过防火墙的单一方法。我为我的一个应用程序编写了这个方法,并决定在这里发布,供大家使用。

背景

这里的想法是使用位于 (C:\windows\system32\FirewallAPI.dll) 的 NetFwTypeLib 来添加一个规则,该规则允许/阻止指定路径的可执行文件建立任何类型的连接。

Using the Code

首先,必须将 FirewallAPI.dll 添加到引用中,并将 NetFwTypeLib 添加到 using 语句中。

然后,您可以使用以下方法

/// <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"); }}} }   

示例

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

这将阻止 test.exe 建立任何外向连接。

关注点

在编写此代码时,我注意到多次使用相同的 INetFwRule 变量可能会引发灾难性错误(访问被拒绝)异常。

© . All rights reserved.