윈도우 XP 부터 Vista, Win7까지 방화벽을 설정하는 루틴이다.
윈도우 XP는 아래부분으로 처리하면 되고 Vista와 Win7은 아래 방법 말고도 다른 방법으로 가능하다.
하지만, 사용법이나 편리성만 두고보면 아래 내용이 편리하다.
아래소스는 몇년전 인터넷에서 가져온것으로 MSDN에서 VB로 작성한 방화벽 등록방법과 동일하다.
단지 아래소스가 XP 이상인지를 검사하는 루틴과 예외처리 메모리해제등을 잘해놔서 요긴하게 쓰다가 잊어버리고 방치된것을 얼마전 다시 쓸일이 생겨 인터넷을 뒤지던중 HNetCfg로 소스를 검사한결과 다시 빛을 본 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
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; |
참고만 하시길..
최신 댓글