需要 import Component-> NetFwTypeLib 引入到项目中,才可以控制windows防火墙; 

uses
    NetFwTypeLib_TLB,System.IniFiles,
    Winapi.ShellAPI
procedure AddFireWall2;
var
  firewallPolicy: INetFwPolicy2;
  firewallRule: INetFwRule;
  fwRules: INetFwRules;
  fwRule: oleVariant;
  fwRuleEnumerator: IEnumVARIANT;
  fetch:LongWord;
  name,AllowIp:string;
  Profiles:INetFwProfile;
  i:Integer;
  CurPath :string;
  ini:TIniFile;
begin
  ini:=TIniFile.Create(GetCurrentDir + '\config.ini');
  try
    AllowIp:=ini.ReadString('FireWall','AllowIP','192.168.0.0/16');
    CoInitialize(nil);
    CurPath := ExtractFileDir(ExtractFilePath(GetCurrentDir));

    firewallPolicy := CreateOleObject('HNetCfg.FwPolicy2') as INetFwPolicy2;
     //如果没有启动防火墙 启动防火墙。
    firewallPolicy.FirewallEnabled[NET_FW_PROFILE2_PRIVATE]:=true;
    firewallPolicy.FirewallEnabled[NET_FW_PROFILE2_PUBLIC]:=true;

    firewallPolicy.DefaultOutboundAction[NET_FW_PROFILE2_PRIVATE]:=NET_FW_ACTION_BLOCK;


    firewallRule := CreateOleObject('HNetCfg.FWRule') as INetFwRule;
    firewallRule.Name := '我防火墙规则';
    firewallRule.Description := '专网';
    firewallRule.Action := NET_FW_ACTION_ALLOW;
    firewallRule.Direction := NET_FW_RULE_DIR_OUT;
    firewallRule.Enabled := True;
    firewallRule.InterfaceTypes := 'All';
    firewallRule.Protocol := NET_FW_IP_PROTOCOL_ANY;
    firewallRule.Grouping:='XXXX.Co';
    firewallRule.RemoteAddresses:= AllowIp;
    firewallPolicy.Rules.Add(firewallRule);

    CoUnInitialize;
  finally
    ini.Free;
  end;


end;

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐