Windows firewall rule for XP

后端 未结 2 1465
萌比男神i
萌比男神i 2020-12-28 09:52

How to programmatically add an application or port to Windows Firewall on Windows XP?

相关标签:
2条回答
  • 2020-12-28 10:33

    Scripting the Windows Firewall is possible, see Scripting the Windows Firewall

    And code examples for example here

    0 讨论(0)
  • 2020-12-28 10:43

    Try this code extracted from our open source SQlite3UI.pas unit:

    function GetXPFirewall(var fwMgr, profile: OleVariant): boolean;
    begin
      Result := (Win32Platform=VER_PLATFORM_WIN32_NT) and
        (Win32MajorVersion>5) or ((Win32MajorVersion=5) and (Win32MinorVersion>0));
      if result then // need Windows XP at least
      try 
        fwMgr := CreateOleObject('HNetCfg.FwMgr');
        profile := fwMgr.LocalPolicy.CurrentProfile;
      except
        on E: Exception do
          result := false;
      end;
    end;
    
    const
      NET_FW_PROFILE_DOMAIN = 0;
      NET_FW_PROFILE_STANDARD = 1;
      NET_FW_IP_VERSION_ANY = 2;
      NET_FW_IP_PROTOCOL_UDP = 17;
      NET_FW_IP_PROTOCOL_TCP = 6;
      NET_FW_SCOPE_ALL = 0;
      NET_FW_SCOPE_LOCAL_SUBNET = 1;
    
    procedure AddApplicationToXPFirewall(const EntryName, ApplicationPathAndExe: string);
    var fwMgr, profile, app: OleVariant;
    begin
      if GetXPFirewall(fwMgr,profile) then
      try
        if profile.FirewallEnabled then begin
          app := CreateOLEObject('HNetCfg.FwAuthorizedApplication');
          try
            app.ProcessImageFileName := ApplicationPathAndExe;
            app.Name := EntryName;
            app.Scope := NET_FW_SCOPE_ALL;
            app.IpVersion := NET_FW_IP_VERSION_ANY;
            app.Enabled :=true;
            profile.AuthorizedApplications.Add(app);
          finally
            app := varNull;
          end;
        end;
      finally
        profile := varNull;
        fwMgr := varNull;
      end;
    end;
    
    procedure AddPortToXPFirewall(const EntryName: string; PortNumber: cardinal);
    var fwMgr, profile, port: OleVariant;
    begin
      if GetXPFirewall(fwMgr,profile) then
      try
        if profile.FirewallEnabled then begin
          port := CreateOLEObject('HNetCfg.FWOpenPort');
          port.Name := EntryName;
          port.Protocol := NET_FW_IP_PROTOCOL_TCP;
          port.Port := PortNumber;
          port.Scope := NET_FW_SCOPE_ALL;
          port.Enabled := true;
          profile.GloballyOpenPorts.Add(port);
        end;
      finally
        port := varNull;
        profile := varNull;
        fwMgr := varNull;
      end;
    end;
    

    It will allow you to add an application or a port to the XP firewall. Should work from Delphi 6 up to XE.

    0 讨论(0)
提交回复
热议问题