我正在创建一个界面,允许用户管理(除其他外)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 复制,否则我只能同时启用或禁用两种类型(公共(public)和私有(private)),这不是我想要的。
如何创建第二个副本?关于如何使用 Java 或命令行执行此操作有什么想法吗?我发现 netsh 导出会创建一个字节文件。看起来它是一个注册表字节文件。有没有办法使用reg query
编辑防火墙?防火墙设置将存储在注册表中的什么位置?我希望避免编写自己的 .exe
。
最佳答案
注册表中存储 Windows 防火墙规则的位置是:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
此注册表项中的数据具有可通过 netsh advfirewall 防火墙
进行编辑的相同变量。大多数实际名称和描述都是类似于 @FirewallAPI.dll,-31293
的引用。防火墙条目没有唯一的 ID,而是通过其名称来标识。因此,并且因为我无法找出引用所指向的内容,所以我使用 netsh advfirewallfirewall
删除了防火墙条目,并使用 reg query
将它们添加回来。
关于java - Windows 7 防火墙 : Modify group items from command line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337343/