我很难找到与Windows防火墙相关的任何内容(关于如何在C++中添加除列表,关闭端口或禁用某些应用程序的Internet访问的应用程序).我发现即使MS站点在Visual Basic中显示示例.
我在哪里可以找到C++的例子?
谢谢
我试图用来firewallAPI.dll添加规则.它适用于calc.exe(或其他一些文件),如下所述,但因msdtc.exe以下异常而失败:
System.IO.FileNotFoundException:'系统找不到指定的文件.(HRESULT异常:0x80070002)'
例:
static void Main(string[] args)
{
var manager = GetFirewallManager();
if (manager.LocalPolicy.CurrentProfile.FirewallEnabled)
{
var path = @"C:\Windows\System32\calc.exe";
//var path = @"C:\Windows\System32\msdtc.exe"; // System.IO.FileNotFoundException: 'The system cannot find the file specified.
AuthorizeApplication("Test", path, NET_FW_SCOPE_.NET_FW_SCOPE_ALL, NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY);
}
}
private const string CLSID_FIREWALL_MANAGER =
"{304CE942-6E39-40D8-943A-B913C40C9CD4}";
private static NetFwTypeLib.INetFwMgr GetFirewallManager()
{
Type objectType = Type.GetTypeFromCLSID(
new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType)
as NetFwTypeLib.INetFwMgr;
}
private const string PROGID_AUTHORIZED_APPLICATION =
"HNetCfg.FwAuthorizedApplication";
public static bool AuthorizeApplication(string title, string applicationPath,
NET_FW_SCOPE_ scope, NET_FW_IP_VERSION_ …Run Code Online (Sandbox Code Playgroud) 如何启用防火墙产品,如何检测(从使用C#编写的Windows窗体应用程序)?
这是我的代码,我在INetFwMgr上遇到错误,无法找到类型或命名空间
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}";
INetFwMgr manager = GetFireWallManager();
bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled;
private static INetFwMgr GetFireWallManager()
{
Type objectType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType) as INetFwMgr;
}
private void button1_Click(object sender, EventArgs e)
{
if (isFirewallEnabled == false)
{
MessageBox.Show("Firewall is not enabled.");
}
else
{
MessageBox.Show("Firewall is enabled.");
}
}
}
}
Run Code Online (Sandbox Code Playgroud) c# windows-firewall windows-firewall-api windows-applications
这是Windows防火墙的一个问题,它的引入非常烦人.并坚持通过几个版本的Windows.
我有两个问题:
是否可以禁用或至少需要在XP/2003 Server中进行确认?
UAC是否在Vista/2008服务器中处理此问题?如果没有 - 有没有办法禁用它?
我在这里有一个完美的Windows 7代码,我从这篇文章中获得帮助....
在Win Xp Sp3 PC上编译相同代码时会出现问题.它不会导致...说界面丢失(错误)....
我似乎无法弄明白.我已经为windows xp再次添加了对hnetcfg.dll(COM APi参考)的引用(在Windows 7中我必须将nother dll" FirewallAPi.dll " 添加到项目中)
using NATUPNPLib;
using NETCONLib;
using NetFwTypeLib;
Run Code Online (Sandbox Code Playgroud)
但是VS仍然看不到接口和其他类
请原谅张贴整个代码
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using NATUPNPLib;
using NETCONLib;
using NetFwTypeLib;
namespace WindowsFirewallManager
{
/// Allows basic access to the windows firewall API.
/// This can be used to add an exception to the windows firewall
/// exceptions list
public class FirewallHelper
{
#region Variables
/// Hooray! …Run Code Online (Sandbox Code Playgroud) 一点背景:Basicaly我想为私人和公共网络添加程序防火墙访问规则.
我曾经使用过这个 - "netsh firewall add allowedprogram program ="Path .."name = AppName ENABLE scope = ALL profile = CURRENT"
但是现在我想使用COM对象自动化一个进程.找到了这段闪亮的代码 - http://web.archive.org/web/20070707110141/http://www.dot.net.nz/Default.aspx?tabid=42&mid=404&ctl=Details&ItemID=8
在实现课程后,我一直在尝试使用FirewallHelper.Instance.GrantAuthorization(@"Path ...","AppName",NET_FW_SCOPE_.NET_FW_SCOPE_ALL,NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY);
我面临的问题是GrantAuthorization方法只会为公共OR专用网络添加规则,而我的旧netsh命令会为每个网络添加1个规则.
命令实际上看起来非常相似,所以它对我来说有点温和.
那么......如何添加两个网络规则?
肖恩
c# firewall windows-firewall windows-firewall-api firewall-access
我正在尝试为 Windows 10 设置防火墙例外。经过多次搜索后,我整理了以下代码:
private const string PROGID_OPEN_PORT = "HNetCfg.FWOpenPort";
private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}";
private NetFwTypeLib.INetFwMgr GetFirewallManager()
{
Type objectType = Type.GetTypeFromCLSID(
new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType)
as NetFwTypeLib.INetFwMgr;
}
INetFwMgr manager = GetFirewallManager();
Type type = Type.GetTypeFromProgID(PROGID_OPEN_PORT);
INetFwOpenPort port = Activator.CreateInstance(type) as INetFwOpenPort;
port.Name = "MyPortRule";
port.Port = 9600;
port.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL;
port.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
port.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY;
manager.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(port);
Run Code Online (Sandbox Code Playgroud)
这确实将防火墙规则放入具有高级安全性的 Windows 防火墙中,但该规则的配置文件设置为公开。配置文件设置为公共防火墙不会让数据通过端口。
使用 Windows UI 修改规则,我确定必须将 Profile 设置为“private”或“any”,以便数据通过。为什么不将 port.Scope 设置为 NET_FW_SCOPE_.NET_FW_SCOPE_ALL 将配置文件设置为 Any?您如何将防火墙规则中的配置文件设置为私有或任何?
我还尝试将 port.Scope 设置为 NET_FW_SCOPE_.NET_FW_SCOPE_LOCAL_SUBNET。配置文件仍设置为“公开”。
我编写了一个 C# 程序,它使用命令行参数来打开和关闭防火墙。
Process proc = new Process();
string top = "netsh.exe";
proc.StartInfo.Arguments = "**Advfirewall set allprofiles state on**";
proc.StartInfo.FileName = top;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
// MessageBox.Show("Disable");
button1.Text = "Set On";
status = false;
Run Code Online (Sandbox Code Playgroud)
我还以管理员权限运行该应用程序。该应用程序会自动以管理员权限运行,但不会将防火墙状态设置为打开或关闭。
当我在 cmd(netsh) 中运行相同的命令时,防火墙会打开或关闭。
有谁知道为什么这不起作用?