使用Windows防火墙API创建适用于服务运行的所有应用程序的规则

使用Windows防火墙API创建适用于服务运行的所有应用程序的规则,windows,windows-services,windows-firewall,windows-firewall-api,Windows,Windows Services,Windows Firewall,Windows Firewall Api,我正在尝试为Windows服务设置防火墙规则,以拒绝所有入站和出站TCP和UDP连接,但使用Windows服务强化API的主机和端口白名单除外,请遵循VBScript示例 现在,这个服务可能会产生新的进程(因为它是一个持续集成的构建和测试代理),所以仅仅设置NewOutboundRule.ApplicationName=“%systemDrive%\WINDOWS\system32\svchost.exe”是不够的,就像上面的示例脚本一样-我需要一个规则来应用于该服务运行的所有应用程序 但是,如

我正在尝试为Windows服务设置防火墙规则,以拒绝所有入站和出站TCP和UDP连接,但使用Windows服务强化API的主机和端口白名单除外,请遵循VBScript示例

现在,这个服务可能会产生新的进程(因为它是一个持续集成的构建和测试代理),所以仅仅设置
NewOutboundRule.ApplicationName=“%systemDrive%\WINDOWS\system32\svchost.exe”
是不够的,就像上面的示例脚本一样-我需要一个规则来应用于该服务运行的所有应用程序

但是,如果我尝试设置一个新的入站规则,其中接口上未指定据称可选的
ApplicationName
属性,则添加新规则的调用将失败(在上面脚本中的
wshRules.add NewOutboundRule
行)。其他一切都是正确的,就好像我指定了
ApplicationName
,调用成功了


是否有某种方法可以创建适用于
ApplicationName
的所有可能值的规则,或者有其他方法可以做到这一点?

经过一些实验,WSH规则的工作原理是这样的:调用
INetFwServiceRestriction::RestrictService
(使用
RestrictService=TRUE
)只需要包含被调用以启动服务的主可执行文件的名称。如果该进程使用任何其他可执行文件生成新进程,则默认情况下,该新进程已阻止所有入站和出站网络连接。即使通过
INetFwServiceRestriction::Rules
为主可执行文件添加了异常,这也是正确的


因此,如果服务运行的辅助可执行文件需要网络访问,那么也有必要为这些可执行文件添加显式的
INetFwRule
异常。这是有意义的-调用
RestrictService
会阻止一切,然后可以添加一个包含应用程序名称的异常白名单。

猜测一下,如果指定服务名称,还必须指定应用程序名称。服务规则首先适用于子流程吗?您可能需要让服务本身实时为自己的子项设置防火墙规则。