我无法删除所有Windows 10防火墙规则

时间:2017-09-27 21:49:57

标签: delphi winapi firewall

我无法删除所有的Windows 10防火墙规则总有一些规则无法删除,我不知道为什么。如何删除所有Windows 10防火墙规则?

我正在以管理员身份运行该应用程序

首先,我获取所有防火墙规则的列表并存储在列表中:listaReglas 然后我在该列表上创建一个循环并调用一个函数来删除像这样的规则

listaReglas:=TlistaReglas.Create;
ListarReglasdelFireWall(listaReglas);
for i:=0 to listaReglas.TotalReglas-1 do begin
  unaRegla:= listaReglas.GetUnaRegla(i);
  if DELUnaRegla(unaRegla.name, error) then begin
     memo1.Lines.Add(IntToStr(i) + ' '+unaRegla.name +' removed OK')
    end else begin
     memo1.Lines.Add(IntToStr(i) + ' '+unaRegla.name +' ERROR removing')
  end;
end;
listaReglas.Free;

DELUnaRegla()函数

function DELUnaRegla(NombreRegla:String;var ERROR:String):boolean;
var
 fwPolicy2       : OleVariant;
 vExisteError:Boolean;
begin
 vExisteError:=False;
 try
  CoInitialize(nil);
  try
    fwPolicy2   := CreateOleObject('HNetCfg.FwPolicy2');
    fwPolicy2.Rules.Remove(NombreRegla);
  finally
  CoUninitialize;
 end;
 except
  on E:EOleException do begin
      Error:=Format('EOleException %s %x', [E.Message,E.ErrorCode]);
      vExisteError:=true;
  end;

  on E:Exception do begin
      Error:=E.Classname + ':' + E.Message;
      vExisteError:=true;
  end;
end;
result:=not(vExisteError);
end;

1 个答案:

答案 0 :(得分:0)

这是一个批处理脚本,它将删除所有规则。 -重置为默认值会清除无法正确删除的规则。

@echo off

echo - Resetting To Default
netsh advfirewall reset >nul 2>&1

echo - Deleting Rules (In)
netsh advfirewall firewall show rule name=all dir=in | find /i "Rule Name:" > "%tmp%\1.txt"
for /f "tokens=3*" %%A in ('type "%tmp%\1.txt"') do (
netsh advfirewall firewall delete rule Name="%%A %%B" >nul 2>&1)

echo - Deleting Rules (Out)
netsh advfirewall firewall show rule name=all dir=out | find /i "Rule Name:" > "%tmp%\1.txt"
for /f "tokens=3*" %%A in ('type "%tmp%\1.txt"') do (
netsh advfirewall firewall delete rule Name="%%A %%B" >nul 2>&1)