我正在创建一个界面,允许用户管理(除此之外)Windows防火墙。 Windows附带的GUI看起来像这样
我的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
。
答案 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
将其添加回来。