방화벽 등록하기

윈도우 XP 부터 Vista, Win7까지 방화벽을 설정하는 루틴이다.
윈도우 XP는 아래부분으로 처리하면 되고 Vista와 Win7은 아래 방법 말고도 다른 방법으로 가능하다.
하지만, 사용법이나 편리성만 두고보면 아래 내용이 편리하다.
아래소스는 몇년전 인터넷에서 가져온것으로 MSDN에서 VB로 작성한 방화벽 등록방법과 동일하다.
단지 아래소스가 XP 이상인지를 검사하는 루틴과 예외처리 메모리해제등을 잘해놔서 요긴하게 쓰다가 잊어버리고 방치된것을 얼마전 다시 쓸일이 생겨 인터넷을 뒤지던중 HNetCfg로 소스를 검사한결과 다시 빛을 본 코드이다.
Uses Oleauto;

function GetFirewall(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 방화벽_어플추가(const 제목, 실행파일_패스포함: string);
var fwMgr, profile, app: OleVariant;
begin
  if GetFirewall(fwMgr,profile) then
  try
    if profile.FirewallEnabled then begin
      app := CreateOLEObject('HNetCfg.FwAuthorizedApplication');
      try
        app.ProcessImageFileName := 실행파일_패스포함;
        app.Name := 제목;
        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 방화벽_포트추가(const 제목: string; 포트번호: cardinal);
var fwMgr, profile, port: OleVariant;
begin
  if GetFirewall(fwMgr,profile) then
  try
    if profile.FirewallEnabled then begin
      port := CreateOLEObject('HNetCfg.FWOpenPort');
      port.Name := 제목;
      port.Protocol := NET_FW_IP_PROTOCOL_TCP;
      port.Port := 포트번호;
      port.Scope := NET_FW_SCOPE_ALL;
      port.Enabled := true;
      profile.GloballyOpenPorts.Add(port);
    end;
  finally
    port := varNull;
    profile := varNull;
    fwMgr := varNull;
  end;
end;

 

참고만 하시길..

Author: yyjksw