我需要实现一个在 Windows 防火墙中添加和删除规则的工具。规则可以是入站或出站的,禁止在指定的协议、IP 和端口上进行通信。我在设计决策时遇到了麻烦,不知道应该使用以下哪个选项:
- PowerShell,例如在https://technet.microsoft.com/en-us/library/jj554906(v=wps.630).aspx。这个选项的问题在于(如果我错了请纠正我)它似乎不支持 Windows 7,而我的工具必须适用于 Windows 7、Windows 8(.1) 以及理想情况下的更高版本的 Windows。此外,我不能使用 C#,而 PowerShell 不能与 C++ 集成,除非(可能,我不确定)通过调用 PowerShell 进程、为其提供命令行选项以及从其输出/输入流读取/写入。
- “netsh advfirewall 防火墙”方式。此选项的问题是 Windows 8.1 表示“netsh advfirewall”上下文已弃用,可能会从更高版本的 Windows 中删除。所以我担心采用这种方式会导致我的工具无法在 Windows 9 或 10 上运行。
- Windows 防火墙的 COM 接口,如这些示例所示https://msdn.microsoft.com/en-us/library/windows/desktop/dd339604(v=vs.85).aspx。所需的 C++ 编码不是问题,尽管它可能比使用 PowerShell 或命令行(netsh advfirewall 防火墙)花费的时间更长。
哪个选项是添加/删除 Windows 防火墙规则的最佳设计决策?我列出的选项还有其他选项或优点/缺点吗?
答案1
对于 Windows 7,操作方法有所不同
Server 2008/Vista / Server R2 / Windows 7 中与防火墙相关的所有内容均通过 HNetCfg.FwPolicy2 COM 对象进行管理
从这里
如果您想使用 PowerShell 但需要针对两个版本的操作系统,我会说编写 2 个函数是最简单的,因为您似乎已经知道如何针对 Windows 8 执行此操作。