加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用Delphi删除Windows防火墙规则(例外)

发布时间:2020-12-15 09:28:44 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用Delphi XE3在 Windows 7上管理防火墙规则(例外).我发现了一个非常有趣的代码,用于向Windows防火墙添加规则,但没有删除(删除)它.拜托,有人可以帮忙吗? 以下是添加规则的代码: procedure AddExceptToFirewall(const Caption,AppPath: String);
我正在尝试使用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;

谢谢!

解决方法

您只需调用 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;

BTW链接文档中几乎没有提供任何内容.我提供的链接仅供参考.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读