windows - 使用 Delphi 删除 Windows 防火墙规则(异常)

标签 windows delphi exception firewall rule

我正在尝试使用 Delphi XE3 在 Windows 7 上管理防火墙规则(异常(exception))。我发现了一个非常有趣的代码,用于向 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;

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

关于windows - 使用 Delphi 删除 Windows 防火墙规则(异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27323508/

相关文章:

delphi - 从远程 FTP 下载文件列表

ruby - 为什么在 ruby​​ 救援 block 中调用的函数无法修改变量?

c++ - 为什么单个线程比多个线程更快,即使它们本质上具有相同的开销?

delphi - FMX - Trayicon 消息处理

delphi - 使用 Delphi 的 oData 服务

java - 实现 Cloneable 并声明 CloneNotSupportedException 但仍然得到 CloneNotSupportedException

java - Spring Data JPA 错误处理的最佳实践是什么

windows - 如何停止在任务栏上显示我的应用程序?

c++ - MinGW + 提升 : undefined reference to `WSAStartup@8'

windows - Bitvise SSH Server 如何在没有密码的情况下对用户进行身份验证?