适用于 XP 的 Windows 防火墙规则

标签 windows delphi winapi delphi-7 windows-firewall

如何以编程方式将应用程序或端口添加到 Windows XP 上的 Windows 防火墙?

最佳答案

试试从我们的开源 SQlite3UI.pas 中提取的这段代码单位:

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;

它将允许您向 XP 防火墙添加应用程序或端口。 应该适用于从 Delphi 6 到 XE。

关于适用于 XP 的 Windows 防火墙规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728521/

相关文章:

windows - Flash 播放器调试器停止工作

windows - Windows 上的 mllr_solve 'Error reading byte order magic number'

delphi - 长入字符串 - StrToInt() 安全吗?

c++ - 如何检测当前屏幕分辨率?

python - py2exe - 如何减少 dll 依赖性?

mysql - 在 Delphi 中为 MySQL 创建 UDF

delphi - 为什么 Windbg 无法看到 Delphi 中创建的内存泄漏?

c++ - 进程外 COM 对象能否确定其父进程?

c++ - 打开文件浏览器?

c++ - 以另一个用户身份运行程序