Windows 7防火墙:从命令行修改组项

时间:2011-09-07 16:28:46

标签: java registry firewall windows-firewall netsh

我正在创建一个界面,允许用户管理(除此之外)Windows防火墙。 Windows附带的GUI看起来像这样

enter image description here

我的GUI是用Java编写的,使用the netsh advfirewall firewall commands来读取当前设置并保存更改。

某些项目是防火墙中的单个记录。但是,“Windows远程管理”项是“分组”项之一。这是多个项目的组合。以下是组合中的其中一项。

Rule Name:                            Windows Remote Management - Compatibility
Mode (HTTP-In)
----------------------------------------------------------------------
Enabled:                              No
Direction:                            In
Profiles:                             Private,Public
Grouping:                             Windows Remote Management
LocalIP:                              Any
RemoteIP:                             LocalSubnet
Protocol:                             TCP
LocalPort:                            80
RemotePort:                           Any
Edge traversal:                       No
Action:                               Allow

在这种情况下,整个组都被禁用,但可以为public或private类型或两者启用。 (更不用说域名)

使用Windows GUI启用此组时,如果仅启用其中一种类型,则必须复制组中的所有项目。一个用于禁用类型的副本,一个用于启用类型。

当我尝试创建第二个副本时出现问题。 netsh advfirewall firewall add rule command不允许我对新项目进行分组。这意味着我无法创建第二个副本!这意味着,除非该项目已被Windows复制,否则我只能一起启用或禁用这两种类型(公共和私有),这不是我想要的。

如何创建第二份副本?有关如何使用Java或命令行进行操作的任何想法?我发现netsh导出会创建一个字节文件。看起来它是一个注册表字节文件。有没有办法使用reg query编辑防火墙?防火墙设置将在何处存储在注册表中?我希望避免写自己的.exe

1 个答案:

答案 0 :(得分:0)

存储Windows防火墙规则的注册表中的位置是:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules

此注册表项中的数据具有可通过netsh advfirewall firewall编辑的相同变量。大多数实际名称和描述都是这样的引用@FirewallAPI.dll,-31293。防火墙条目没有唯一的ID,并且由其名称标识。由于这个原因,并且因为我无法找出引用指向的内容,因此使用netsh advfirewall firewall删除了防火墙条目并使用reg query将其添加回来。