Переглянути джерело

* Simple Add/remove firewall rule wrapper by d4nn13 (forum)

git-svn-id: trunk@25021 -
marco 12 роки тому
батько
коміт
ee5ce52d4c
1 змінених файлів з 43 додано та 1 видалено
  1. 43 1
      packages/winunits-base/src/winutils.pp

+ 43 - 1
packages/winunits-base/src/winutils.pp

@@ -18,7 +18,7 @@ unit winutils;
 
 Interface
 
-Uses Windows;
+Uses Windows, ComObj, ActiveX;
 
 // returns True if the currently logged Windows user has Administrator rights. Delphi.about.com
 // From Delphi.about.com with permission, http://delphi.about.com/od/delphitips2007/qt/is_win_admin.htm
@@ -27,6 +27,21 @@ function IsWindowsAdmin: Boolean;
 // Removes Browsers "downloaded" attribute from a file.
 procedure UnBlockFile(const name:String);
 
+const
+  NET_FW_PROFILE2_DOMAIN  = 1;
+  NET_FW_PROFILE2_PRIVATE = 2;
+  NET_FW_PROFILE2_PUBLIC  = 4;
+  NET_FW_IP_PROTOCOL_TCP = 6;
+  NET_FW_IP_PROTOCOL_UDP = 17;
+  NET_FW_ACTION_ALLOW    = 1;  
+
+// add firewall rule e.g. 
+// AddProgramExceptionToFireWall( Application.Title,Application.Title, Application.ExeName, NET_FW_IP_PROTOCOL_TCP, NET_FW_PROFILE2_DOMAIN or NET_FW_PROFILE2_PRIVATE or NET_FW_PROFILE2_PUBLIC);
+procedure AddProgramExceptionToFireWall(Const wsCaption, wsDescription, wsExecutable: WideString; iProtocol,iProfile:Integer);
+
+// remove firewall rule, e.g.  RemoveExceptionFromFW(Application.Title);
+procedure RemoveExceptionFromFW(Const exCaption: WideString);
+
 implementation
 
 const
@@ -91,4 +106,31 @@ begin
  closefile(f);
 end;
 
+procedure AddProgramExceptionToFireWall(Const wsCaption, wsDescription, wsExecutable: WideString; iProtocol, iProfile:Integer);
+var
+  fwPolicy2                :  OleVariant;
+  RulesObject              :  OleVariant;
+  NewRule                  :  OleVariant;
+begin
+  fwPolicy2                := CreateOleObject('HNetCfg.FwPolicy2');
+  RulesObject              := fwPolicy2.Rules;
+  NewRule                  := CreateOleObject('HNetCfg.FWRule');
+  NewRule.Name             := wsCaption;
+  NewRule.Description      := wsDescription;
+  NewRule.Applicationname  := wsExecutable;
+  NewRule.Protocol         := iProtocol;
+  NewRule.Enabled          := TRUE;
+  NewRule.Profiles         := iProfile;
+  NewRule.Action           := NET_FW_ACTION_ALLOW;
+  RulesObject.Add(NewRule);
+end; 
+
+procedure RemoveExceptionFromFW(Const exCaption: WideString);
+var
+  fwPolicy2      : OleVariant;
+begin
+  fwPolicy2      := CreateOleObject('HNetCfg.FwPolicy2');
+  fwPolicy2.Rules.Remove(exCaption);
+end;   
+
 end.