【问题标题】:Remove Windows Firewall Rule (Exception) using Delphi使用 Delphi 删除 Windows 防火墙规则(例外)
【发布时间】:2014-12-05 19:44:54
【问题描述】:

我正在尝试使用 Delphi XE3 在 Windows 7 上管理防火墙规则(例外)。我发现了一个非常有趣的代码,用于向 Windows 防火墙添加规则,但没有删除(删除)它。请问,有人可以帮忙吗?

添加规则的代码如下:

procedure AddExceptToFirewall(const Caption, AppPath: String);
// Uses ComObj
const
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC  = 4;
  NET_FW_IP_PROTOCOL_TCP  = 6;
  NET_FW_ACTION_ALLOW     = 1;
var
  Profile: Integer;
  Policy2: OleVariant;
  RObject: OleVariant;
  NewRule: OleVariant;
begin
  Profile := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
  Policy2 := CreateOleObject('HNetCfg.FwPolicy2');
  RObject := Policy2.Rules;
  NewRule := CreateOleObject('HNetCfg.FWRule');
  NewRule.Name        := Caption;
  NewRule.Description := Caption;
  NewRule.ApplicationName := AppPath;
  NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
  NewRule.Enabled := True;
  NewRule.Grouping := '';
  NewRule.Profiles := Profile;
  NewRule.Action := NET_FW_ACTION_ALLOW;
  RObject.Add(NewRule);
end;

谢谢!

【问题讨论】:

    标签: windows delphi exception firewall rule


    【解决方案1】:

    您只需调用INetFWRules.Remove,并传入规则名称。该名称与您在创建它时使用的名称相同(您在上面提供的代码中为RObject.Name)。

    // Note: Normal COM exception handling should be used. Omitted for clarity.
    
    procedure RemoveExceptFromFirewall(const RuleName: String);
    const
      NET_FW_PROFILE2_PRIVATE = 2;
      NET_FW_PROFILE2_PUBLIC  = 4;
    var
      Profile: Integer;
      Policy2: OleVariant;
      RObject: OleVariant;
    begin
      Profile := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
      Policy2 := CreateOleObject('HNetCfg.FwPolicy2');
      RObject := Policy2.Rules;
      RObject.Remove(RuleName);
    end;
    

    顺便说一句,链接文档中几乎没有提供任何内容。我提供的链接仅供参考。

    【讨论】:

    • @Paruba,你真的应该考虑导入类型库而不是从互联网上复制后期绑定代码。此外,您应该从方法调用中检查HRESULT。这两个建议都可以为您省去很多麻烦。
    • 仅供参考,防火墙 API 的类型库位于 %WINDIR%\System32\FirewallAPI.dll
    • 这有一个缺点,如果您有多个同名规则,它将删除所有规则。不好。
    • 在我的 Win10 测试中,它只删除了列表中的第一个条目。工作流程有变化吗?
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2011-08-09
    • 2021-09-01
    • 1970-01-01
    • 2018-08-07
    • 2021-04-26
    相关资源
    最近更新 更多