需要 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;