首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#(VB.NET)操作Windows自带的防火墙 之 启用(开启)/禁用(关闭)防火墙

C# 操作 Windows 自带的防火墙分为启用(开启)/禁用(关闭)防火墙两种情况。在 C# 代码中,我们可以通过操作注册表中的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WFDg 下的防火墙策略来实现这一步操作。

以下是详细的步骤:

  1. 使用 C# 操作注册表

使用 C# 中的 System.Runtime.InteropServices.DllImport("Shell32.dll") 属性定义以下函数:

代码语言:csharp
复制
[DllImport("Shell32.dll")]
private static extern uint SHNavigate2([In] ref SHELLEXECUTEINFO pSHELLEXECUTEINFO);

[DllImport("Kernel32.dll")]
private static extern uint RegOpenKeyEx(IntPtr hKey,
    [MarshalAs(UnmanagedType.LPTStr), In] string lpSubKey,
    int ulOptions, int samDesired, out IntPtr phkResult);

[DllImport("Kernel32.dll")]
private static extern int RegCloseKey(IntPtr hKey);

[DllImport("Advapi32.dll", EntryPoint = "RegQueryValueEx", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int RegQueryValueEx ([In, MarshalAs(UnmanagedType.LPTStr)]
    string lpValueName, int reserved, out uint Type, byte[] lpData, ref uint lpcbData);
  1. 实现代码

首先打开防火墙,执行以下代码:

代码语言:csharp
复制
SHELLEXECUTEINFO sei = CreateShellExecuteInfo(null, "cmd", "/c netsh advfirewall firewall add rule name=\"YourRuleNameHere\" dir=in action=allow protocol=any scope=per\_user", 0, null);
SHNavigate2(ref sei);
int retCode = HIWORD(sei.hResult);
Marshal.FreeCoTaskMem((IntPtr)sei);
regOpenKeyEx IntPtr hkey, "SYSTEM\CurrentControlSet\Services\WFDg", 0, 0, out IntPtr phkResult);
int retCode = RegOpenKeyEx(phkResult, "CurrentConfiguration", 1, 0, out hkey1);
int retCode = RegQueryValueEx (hkey1, "FirewallPolicy", 0, out uint nTType, string FirewallPolicy, ref uint ncbName);

在注册表中找到当前配置的 FirewallPolicy,然后查询该策略下的所有规则项,找到需要打开的规则,删除,然后重新新建。删除的方法是:将规则对应的类型从 registrykey 中删除,如果 registrykey 为 phkResult,可以直接删除。重新新建的方法是更新 phkResult 指向的 registrykey 下的 FirewallPolicy 对象。

  1. 反向注册表操作

禁用防火墙的方法是使用 System.Runtime.InteropServices.DllImport("Shell32.dll") 属性定义以下函数,然后将防火墙功能设置为 0,并将注册表中的 firewall policy 值设置为 0。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券