iSafer_FWRule.pas
上传用户:xiuanze55
上传日期:2017-08-03
资源大小:1080k
文件大小:19k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit iSafer_FWRule;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, ExtCtrls, Mask, StdCtrls, ComCtrls,commctrl, Buttons, ImgList,ShellAPI;
  6. type
  7.   TForm_FWRule = class(TForm)
  8.     FWRule: TPageControl;
  9.     IpRulePage: TTabSheet;
  10.     Panel_Top: TPanel;
  11.     GroupBox_IP: TGroupBox;
  12.     Label_sIP: TLabel;
  13.     Label_eIP: TLabel;
  14.     Label_To1: TLabel;
  15.     Radio_IP_Single: TRadioButton;
  16.     Radio_IP_Range: TRadioButton;
  17.     MaskEdit_sIP: TMaskEdit;
  18.     MaskEdit_eIP: TMaskEdit;
  19.     Radio_IP_All: TRadioButton;
  20.     Radio_Access_Allow: TRadioButton;
  21.     Radio_Access_Deny: TRadioButton;
  22.     GroupBox_Port: TGroupBox;
  23.     Label_sPort: TLabel;
  24.     Label_ePort: TLabel;
  25.     Label_To2: TLabel;
  26.     Radio_Port_Single: TRadioButton;
  27.     Radio_Port_Range: TRadioButton;
  28.     MaskEdit_sPort: TMaskEdit;
  29.     MaskEdit_ePort: TMaskEdit;
  30.     GroupBox_PortType: TGroupBox;
  31.     Radio_TCP: TRadioButton;
  32.     Radio_UDP: TRadioButton;
  33.     Radio_Port_All: TRadioButton;
  34.     PathRulePage: TTabSheet;
  35.     PathEdit: TEdit;
  36.     GroupBox1: TGroupBox;
  37.     Permission: TRadioGroup;
  38.     OpenDialog1: TOpenDialog;
  39.     IPAddressFrom: TBevel;
  40.     IPAddressTo: TBevel;
  41.     BmBtnEditOK: TBitBtn;
  42.     BmBtnEditCancel: TBitBtn;
  43.     BmBtnPath: TBitBtn;
  44.     RuleEditorImageList: TImageList;
  45.     Panel1: TPanel;
  46.     procedure InputStatusCheck(Sender: TObject);
  47.     procedure FormCreate(Sender: TObject);
  48.     procedure FormShow(Sender: TObject);
  49.     procedure Radio_IP_SingleClick(Sender: TObject);
  50.     procedure Radio_IP_RangeClick(Sender: TObject);
  51.     procedure Radio_IP_AllClick(Sender: TObject);
  52.     procedure Radio_Port_SingleClick(Sender: TObject);
  53.     procedure Radio_Port_RangeClick(Sender: TObject);
  54.     procedure Radio_Port_AllClick(Sender: TObject);
  55.     procedure BmBtnEditOKClick(Sender: TObject);
  56.     procedure BmBtnEditCancelClick(Sender: TObject);
  57.     procedure BmBtnPathClick(Sender: TObject); private
  58.     { Private declarations }
  59.     FIPAddress: Longint;
  60.     HIPAddressFrom: HWND;
  61.     HIPAddressTo: HWND;
  62.     PrevWndProc: TWndMethod;
  63.     procedure  ChooseEditPathRule();
  64.     procedure  NewWindowProc(var Message: TMessage);
  65.     function   GetIPAddress(handle:HWND):string;
  66.   public
  67.     { Public declarations }
  68.     procedure  SetIPFrom(sIp:string);
  69.     function GetICON(path:string):TIcon;
  70.   end;
  71. //Appley changes to running fire service
  72.   procedure ApplyFWStatus(StatusMode: byte);
  73. var
  74.   Form_FWRule: TForm_FWRule;
  75.   const
  76.   IP_ADDRESS_ID_FROM: Longword = $1100;
  77.   IP_ADDRESS_ID_TO: Longword = $1101;
  78. implementation
  79. uses iSafer_Main, iSafer_Option,
  80.      PSMFWRule;//Add on Web, Feb 11st, 2004
  81. {$R *.dfm}
  82. {Get Icon of application given by app path}
  83. function TForm_FWRule.GetICON(path:string):TIcon;
  84. {var
  85.   wp: Array[1..MAX_PATH] of Char;
  86.   i: Integer;
  87. }
  88. var
  89. TheIcon:TIcon;
  90. begin
  91.   TheIcon:=TIcon.create;
  92.   TheIcon.Handle := ExtractIcon(hInstance,Pchar(path),0);
  93.   if TheIcon.Handle=0 then
  94.   begin
  95.     {ShowMessage('Call');
  96.     for i:=1 to StrLen(Pchar(path)) do wp[i]:=path[i];
  97.     TheIcon.Handle := ExtractIconW(hInstance,PWchar(@wp),0);
  98.     }
  99.     RuleEditorImageList.GetIcon(2,TheIcon);
  100.   end;
  101.   result :=TheIcon;
  102. end;
  103. procedure ApplyFWStatus(StatusMode: byte);//=1: New rules, =2: Stop FW, =0: FW is running and no new rules.
  104. type
  105.   ShareData=record
  106.     dwTotalBytes: DWORD;
  107.     intProcessCount: Integer;
  108.     boNewRule: Array[0..512] of byte;
  109.   end;
  110. var
  111.   //llInit: Boolean;
  112.   HMapping: THandle;
  113.   PMapData: ^ShareData;
  114. begin
  115.   try
  116.   HMapping := CreateFileMapping(THandle($FFFFFFFF), nil, PAGE_READWRITE, 0, SizeOf(ShareData), pchar('PSMFWShareM'));
  117.   // Check if already exists
  118.   //llInit := (GetLastError() <> ERROR_ALREADY_EXISTS);
  119.   if (hMapping = 0) then begin
  120.     SysUtils.Beep;
  121.     MessageBox(0,'Can not apply new rules. '#13#10'Please restart Firewall to apply new rules!','Firewall',MB_OK);
  122.     exit;
  123.   end;
  124.   PMapData := MapViewOfFile(HMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  125.   if PMapData = nil then begin
  126.     CloseHandle(HMapping);
  127.     SysUtils.Beep;
  128.     MessageBox(0,'New rules can not be applied. '#13#10'Please restart Firewall to apply new rules!','Firewall',MB_OK);
  129.     exit;
  130.   end;
  131.   //if (not llInit) then begin
  132.     FillChar(PMapData^.boNewRule,SizeOf(PMapData^.boNewRule),StatusMode);
  133.     UnMapViewOfFile(PMapData);
  134.     CloseHandle(HMapping);
  135.   //end;
  136.   except
  137.     SysUtils.Beep;
  138.     MessageBox(0,'Error at ApplyNewRules()','Firewall',MB_OK);
  139.   end;
  140. end;
  141. // 涝仿芒 劝己拳 惑怕 汲沥
  142. {
  143. Updated on 20th Feb to handle IP control.
  144. lhuy@psmkorea.co.kr
  145. }
  146. procedure TForm_FWRule.InputStatusCheck(Sender: TObject);
  147. begin
  148.      // IP林家 涝仿芒 劝己拳 惑怕 汲沥
  149.      if Radio_IP_Single.Checked then begin
  150.           MaskEdit_sIP.Enabled:= True;
  151.           MaskEdit_eIP.Enabled:= False;
  152.           EnableWindow(HIPAddressFrom,TRUE);
  153.           EnableWindow(HIPAddressTo,FALSE);
  154.      end;
  155.      if Radio_IP_Range.Checked then begin
  156.           //MaskEdit_sIP.Enabled:= True;
  157.           //MaskEdit_eIP.Enabled:= True;
  158.           EnableWindow(HIPAddressFrom,TRUE);
  159.           EnableWindow(HIPAddressTo,TRUE);
  160.      end;
  161.      if Radio_IP_All.Checked then begin
  162.           MaskEdit_sIP.Enabled:= False;
  163.           MaskEdit_eIP.Enabled:= False;
  164.           EnableWindow(HIPAddressFrom,FALSE);
  165.           EnableWindow(HIPAddressTo,FALSE);
  166.      end;
  167.      // 器飘锅龋 涝仿芒 劝己拳 惑怕 汲沥
  168.      if Radio_Port_Single.Checked then begin
  169.           MaskEdit_sPort.Enabled:= True;
  170.           MaskEdit_ePort.Enabled:= False;
  171.      end;
  172.      if Radio_Port_Range.Checked then begin
  173.           MaskEdit_sPort.Enabled:= True;
  174.           MaskEdit_ePort.Enabled:= True;
  175.      end;
  176.      if Radio_Port_All.Checked then begin
  177.           MaskEdit_sPort.Enabled:= False;
  178.           MaskEdit_ePort.Enabled:= False;
  179.      end;
  180. end;
  181. {
  182. Init IP Address from IP control
  183. Updated on 19th Feb, 2004
  184. LuuTruongHuy<lhuy@psmkorea.co.kr>
  185. }
  186. procedure TForm_FWRule.FormCreate(Sender: TObject);
  187. var 
  188.   lpInitCtrls: TInitCommonControlsEx;
  189.   wfont: WPARAM;
  190. begin
  191.   lpInitCtrls.dwSize := SizeOf(TInitCommonControlsEx);
  192.   lpInitCtrls.dwICC  := ICC_INTERNET_CLASSES;
  193.   if InitCommonControlsEx(lpInitCtrls) then
  194.   begin
  195.     PrevWndProc := WindowProc;
  196.     WindowProc  := NewWindowProc;
  197.       //Create FROM_IP
  198.       HIPAddressFrom := CreateWindowEx(WS_EX_LEFT, WC_IPADDRESS, nil,
  199.       WS_CHILD + WS_VISIBLE + WS_BORDER + WS_TABSTOP,
  200.       IPAddressFrom.Left, IPAddressFrom.Top, IPAddressFrom.Width, IPAddressFrom.Height,
  201.       GroupBox_IP.Handle, IP_ADDRESS_ID_FROM, HInstance, nil);
  202.       //Creat TO_IP
  203.       HIPAddressTo := CreateWindowEx(WS_EX_LEFT, WC_IPADDRESS, nil,
  204.       WS_CHILD + WS_VISIBLE + WS_BORDER + WS_TABSTOP,
  205.       IPAddressTo.Left, IPAddressTo.Top, IPAddressTo.Width, IPAddressTo.Height,
  206.       GroupBox_IP.Handle, IP_ADDRESS_ID_TO, HInstance, nil);
  207.     //SendMessage(MaskEdit_sPort.Handle,WM_GETFONT)
  208.     SendMessage(HIPAddressFrom, WM_SETFONT, MaskEdit_sPort.Font.Handle, 1);
  209.     SendMessage(HIPAddressTo, WM_SETFONT, MaskEdit_sPort.Font.Handle, 1);
  210.   end;
  211.    PathEdit.MaxLength:=MAX_PATH;   //Set max length of path edit control.
  212. end;
  213. procedure TForm_FWRule.NewWindowProc(var Message: TMessage);
  214. var 
  215.   nField: longint; 
  216. begin
  217.   case Message.Msg of 
  218.     WM_NOTIFY:  
  219.       begin 
  220.         if PNMHDR(Ptr(Message.lParam)).idFrom = IP_ADDRESS_ID_FROM then
  221.         begin
  222.           case PNMIPAddress(ptr(Message.lParam)).hdr.code of
  223.             IPN_FIELDCHANGED:
  224.               begin
  225.                 if SendMessage(HIPAddressFrom, IPM_ISBLANK, 0, 0) = 0 then
  226.                   SendMessage(HIPAddressFrom, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress)));
  227.               end;
  228.           end;
  229.         end;
  230.         if PNMHDR(Ptr(Message.lParam)).idFrom = IP_ADDRESS_ID_TO then
  231.         begin
  232.           case PNMIPAddress(ptr(Message.lParam)).hdr.code of
  233.             IPN_FIELDCHANGED:
  234.               begin
  235.                 if SendMessage(HIPAddressTo, IPM_ISBLANK, 0, 0) = 0 then
  236.                   SendMessage(HIPAddressTo, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress)));
  237.               end;
  238.           end;
  239.         end;
  240.       end;
  241.     WM_COMMAND:
  242.       begin
  243.         if Message.WParamLo = IP_ADDRESS_ID_FROM then
  244.           case Message.WParamHi of
  245.             EN_SETFOCUS:
  246.               begin
  247.                 nField := SendMessage(HIPAddressFrom, IPM_GETADDRESS, 0,
  248.                   lParam(LPDWORD(@FIPAddress)));
  249.                 if nField = 4 then nField := 0;
  250.                 SendMessage(HIPAddressFrom, IPM_SETFOCUS, wParam(nField), 0);
  251.               end;
  252.             EN_KILLFOCUS:
  253.               begin
  254.                 if SendMessage(HIPAddressFrom, IPM_ISBLANK, 0, 0) = 0 then
  255.                   SendMessage(HIPAddressFrom, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress)));
  256.               end;
  257.             EN_CHANGE:
  258.               begin
  259.               end;
  260.           end;
  261.           if Message.WParamLo = IP_ADDRESS_ID_TO then
  262.           case Message.WParamHi of
  263.             EN_SETFOCUS:
  264.               begin
  265.                 nField := SendMessage(HIPAddressTo, IPM_GETADDRESS, 0,
  266.                   lParam(LPDWORD(@FIPAddress)));
  267.                 if nField = 4 then nField := 0;
  268.                 SendMessage(HIPAddressTo, IPM_SETFOCUS, wParam(nField), 0);
  269.               end;
  270.             EN_KILLFOCUS:
  271.               begin
  272.                 if SendMessage(HIPAddressFrom, IPM_ISBLANK, 0, 0) = 0 then
  273.                   SendMessage(HIPAddressFrom, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress)));
  274.               end;
  275.             EN_CHANGE:
  276.               begin
  277.               end;
  278.           end;
  279.       end;
  280.   end;
  281.   if Assigned(PrevWndProc) then PrevWndproc(Message);
  282. end;
  283. procedure TForm_FWRule.FormShow(Sender: TObject);
  284. begin
  285.      InputStatusCheck(self);
  286. end;
  287. procedure TForm_FWRule.Radio_IP_SingleClick(Sender: TObject);
  288. begin
  289.      InputStatusCheck(self);
  290. end;
  291. procedure TForm_FWRule.Radio_IP_RangeClick(Sender: TObject);
  292. begin
  293.      InputStatusCheck(self);
  294. end;
  295. procedure TForm_FWRule.Radio_IP_AllClick(Sender: TObject);
  296. begin
  297.      InputStatusCheck(self);
  298. end;
  299. procedure TForm_FWRule.Radio_Port_SingleClick(Sender: TObject);
  300. begin
  301.      InputStatusCheck(self);
  302. end;
  303. procedure TForm_FWRule.Radio_Port_RangeClick(Sender: TObject);
  304. begin
  305.      InputStatusCheck(self);
  306. end;
  307. procedure TForm_FWRule.Radio_Port_AllClick(Sender: TObject);
  308. begin
  309.      InputStatusCheck(self);
  310. end;
  311. {process when users choose editing path-rule page}
  312. procedure TForm_FWRule.ChooseEditPathRule();
  313. var
  314.      fwPathRule:TPSMFWRule;
  315.      ispermitted: integer;
  316.      ListItem: TListItem;
  317.      imIndex:Integer;
  318.      tmpPath:String;
  319. begin
  320.      if Permission.ItemIndex =0 then
  321.           ispermitted:=1
  322.      else
  323.           ispermitted:=0;
  324.      {Add to Registry}
  325.      tmpPath:=LowerCase(PathEdit.Text);
  326.      if(fwPathRule.PathRuleExisted(PChar(tmpPath),ispermitted)=False) then
  327.      begin
  328.      fwPathRule.AddPathRule(PChar(tmpPath),ispermitted);
  329.      {Add to PathRule List}
  330.      //if(Form_Option.Path_List.FindCaption(0,tmpPath,FALSE,TRUE,FALSE)= nil)then
  331.           imIndex:=Form_Option.ImageListForAppPath.AddIcon(GetICON(PathEdit.Text));
  332.           ListItem:=Form_Option.Path_List.Items.Add;
  333.           //ListItem.ImageIndex:=5;
  334.           ListItem.Caption:=tmpPath;// PathEdit.Text;
  335.           if(ispermitted=1) then
  336.                ListItem.SubItems.Add('ALLOW')
  337.           else
  338.                ListItem.SubItems.Add('DENY');
  339.           //Add Application icon here.
  340.           ListItem.ImageIndex:=imIndex;
  341.      end
  342.      else
  343.           MessageBox(Self.Handle,'This Application Rule is existed','PSM FireWall',MB_OK or MB_ICONEXCLAMATION);
  344. end;
  345. {
  346. Get IP Address from IP control
  347. Creat on 19th Feb, 2004
  348. LuuTruongHuy<lhuy@psmkorea.co.kr>
  349. }
  350. function TForm_FWRule.GetIPAddress(handle:HWND):string;
  351. var
  352.      wIP: longword;
  353.      b1,b2,b3,b4: Byte;
  354. begin
  355.      SendMessage(handle,IPM_GETADDRESS,0,LPARAM(@wIP));
  356.      b1:=FIRST_IPADDRESS(wIP);
  357.      b2:=SECOND_IPADDRESS(wIP);
  358.      b3:=THIRD_IPADDRESS(wIP);
  359.      b4:=FOURTH_IPADDRESS(wIP);
  360.      Result:=Format('%d.%d.%d.%d',[b1,b2,b3,b4]);
  361. end;
  362. procedure  TForm_FWRule.SetIPFrom(sIp:string);
  363. var
  364.      ipItems: TStringList;
  365.      b1,b2,b3,b4: Byte;
  366.      ipNum:Integer;
  367. begin
  368.     ipItems:=TStringList.Create;
  369.     ExtractStrings(['.'],[' '],PChar(sIp),ipItems);
  370.     b1:=strtoint(ipItems[0]);
  371.     b2:=strtoint(ipItems[1]);
  372.     b3:=strtoint(ipItems[2]);
  373.     b4:=strtoint(ipItems[3]);
  374.     ipItems.Free;
  375.     ipNum:= MAKEIPADDRESS(b1,b2,b3,b4);
  376.     SendMessage(HIPAddressFrom,IPM_SETADDRESS,0,lParam(DWORD(ipNum)));
  377. end;
  378. procedure TForm_FWRule.BmBtnEditOKClick(Sender: TObject);
  379. var
  380.      i: Integer;
  381.      strIP, strPort, strProtocol, strType: String;
  382.      strMessage: String;
  383.      strFileName: String;
  384.      bSuccess: Boolean;
  385.      ListItem: TListItem;
  386.      TempFile: TextFile;
  387.      //Huy
  388.      psmFWRule:TPSMFWRule;
  389.      FromIP,ToIP: Pchar;
  390.      FromPort,ToPort: Integer;
  391.      IsPermitted: Integer;
  392. begin
  393.      //Check which page is currently active
  394.      //Huy
  395.      strMessage:= '';
  396.      {Editing Path Rule page is active}
  397.      if FWRule.ActivePageIndex=1 then
  398.      begin
  399.           if not FileExists(PathEdit.Text) then
  400.           begin
  401.               MessageBox(Self.Handle,'Chosen file doesn''t exist', 'Please choose another.',MB_OK or  MB_ICONERROR );
  402.               exit;
  403.           end;
  404.           ChooseEditPathRule;
  405.           if(Form_Main.bFWStart)then
  406.               ApplyFWStatus(1);//Apply a new rule
  407.           Form_FWRule.Close;
  408.           exit;
  409.      end;
  410.      {Editing IP Rule page is active}
  411.      // IP林家 汲沥 眉农
  412.      if Radio_IP_Single.Checked then begin
  413.           FromIP:= PChar(GetIPAddress(HIPAddressFrom));
  414.           ToIP:=  PChar(GetIPAddress(HIPAddressFrom));
  415.      end;
  416.      if Radio_IP_Range.Checked then begin
  417.           FromIP:= PChar(GetIPAddress(HIPAddressFrom));
  418.           ToIP:=  Pchar(GetIPAddress(HIPAddressTo));
  419.      end;
  420.      if Radio_IP_All.Checked then begin
  421.           FromIP:= '000.000.000.001';
  422.           ToIP:=  '255.255.255.255';
  423.      end;
  424.      FromIP:= Pchar(psmFWRule.IPStd(FromIP));
  425.      ToIP:= PChar(psmFWRule.IPStd(ToIP));
  426.      //Check IP range validity
  427.      if StrComp(FromIP,ToIP)>0 then
  428.      begin
  429.           MessageBox(Form_FWRule.Handle,'IP range is invalid','Rule Edit Error',MB_OK or MB_ICONERROR);
  430.           exit;
  431.      end;
  432.      strIP:= FromIP + ' ~ ' + ToIP;
  433.      strMessage:= strMessage + 'IP Address : ' + FromIP + ' ~ ' + ToIP;
  434.      strMessage:= strMessage + #13;
  435.      // 器飘锅龋 汲沥 眉农
  436.      {for editing port}
  437.      try
  438.           if Radio_Port_Single.Checked then begin
  439.                FromPort:=StrToInt(Trim(MaskEdit_sPort.Text));
  440.                ToPort:= StrToInt(Trim(MaskEdit_sPort.Text));
  441.           end;
  442.           if Radio_Port_Range.Checked then begin
  443.                FromPort:=StrToInt(Trim(MaskEdit_sPort.Text));
  444.                ToPort:= StrToInt(Trim(MaskEdit_ePort.Text));
  445.           end;
  446.      except
  447.           MessageBox(Form_FWRule.Handle,'Invalid Port Number','Rule Edit Error',MB_OK or MB_ICONERROR);
  448.           exit;
  449.      end;
  450.      if Radio_Port_All.Checked then begin
  451.           FromPort:=0;
  452.           ToPort:= 65535;
  453.      end;
  454.      //Check of port range is valid or not
  455.      if(FromPort>ToPort) then
  456.      begin
  457.         MessageBox(Form_FWRule.Handle,'Port range is invalid','Rule Edit Error',MB_OK or MB_ICONERROR);
  458.         exit;
  459.      end;
  460.      if(ToPort<0) then ToPort:=0;
  461.      if(ToPort>65535) then ToPort:=65535;
  462.      if(FromPort<0) then FromPort:=0;
  463.      if(FromPort>65535) then FromPort:=65535;
  464.      strPort:= inttostr(FromPort) + ' ~ ' + inttostr(ToPort);
  465.      strMessage:= strMessage + 'Port number : ' + inttostr(FromPort) + ' ~ ' + inttostr(ToPort);
  466.      strMessage:= strMessage + #13;
  467.      // 器飘鸥涝 汲沥 眉农
  468.      {
  469.      if Radio_TCP.Checked then begin
  470.           strProtocol:= 'TCP';
  471.           strMessage:= strMessage + '器飘鸥涝 : TCP';
  472.      end;
  473.      if Radio_UDP.Checked then begin
  474.           strProtocol:= 'UDP';
  475.           strMessage:= strMessage + '器飘鸥涝 : UDP';
  476.      end;
  477.      }
  478.      strProtocol:= 'TCP/UDP';
  479.      strMessage:= strMessage + 'Protocol : TCP/UDP';
  480.      strMessage:= strMessage + #13;
  481.      // 倾侩咯何 汲沥 眉农
  482.      if Radio_Access_Allow.Checked then begin
  483.           strType:= 'Allow';
  484.           strMessage:= strMessage + 'Permission : Allow';
  485.           IsPermitted:=1;
  486.      end;
  487.      if Radio_Access_Deny.Checked then begin
  488.           strType:= 'Deny';
  489.           strMessage:= strMessage + 'Permission : Deny';
  490.           IsPermitted:=0;
  491.      end;
  492.      strMessage:= strMessage + #13;
  493.      strMessage:= strMessage + #13 + 'add this rule?';
  494.      if Application.MessageBox(PChar(strMessage), PChar(Form_FWRule.Caption), MB_YESNO) = IDYES then begin
  495.           // 规拳寒 逢 利侩窍扁
  496.           if Form_Main.bFWStart then begin
  497.                {In the case the service was started}
  498.                //bSuccess:= Form_Option.iShieldRuleControl(1, strIP, strPort, strProtocol, strType);
  499.           end else begin
  500.                {In the case the service wasnot started}
  501.                bSuccess:= True;
  502.           end;
  503.           {Add and modify by Huy in Feb 04}
  504.           bSuccess:= True;
  505.           if bSuccess then begin
  506.                // 规拳寒 逢 府胶飘俊 眠啊窍扁
  507.                //if(Form_Option.ListView_FWRule.FindCaption())
  508.                if(psmFWRule.IPRuleExisted(FromIp,ToIp,FromPort,ToPort,IsPermitted)=False)then
  509.                begin
  510.                     ListItem:= Form_Option.ListView_FWRule.Items.Add;
  511.                     ListItem.ImageIndex:=5;
  512.                     ListItem.Caption:= strIP;
  513.                     ListItem.SubItems.Add(strPort);
  514.                     ListItem.SubItems.Add(strProtocol);
  515.                     //ListItem.SubItems.Add(strType);
  516.                     if(ispermitted=1) then
  517.                        ListItem.SubItems.Add('ALLOW')
  518.                      else
  519.                     ListItem.SubItems.Add('DENY');
  520.                     //Add rule to Registry-Huy
  521.                     psmFWRule.AddIPRule(FromIp,ToIp,FromPort,ToPort,IsPermitted);
  522.                     if(Form_Main.bFWStart) then
  523.                            ApplyFWStatus(1);
  524.                end
  525.                else
  526.                     MessageBox(Self.Handle,'This IP Rule is existed','PSM FireWall',MB_OK or MB_ICONEXCLAMATION);
  527.           end;
  528.           Form_FWRule.Close;
  529.      end;
  530. end;
  531. procedure TForm_FWRule.BmBtnEditCancelClick(Sender: TObject);
  532. begin
  533.         Close;
  534. end;
  535. procedure TForm_FWRule.BmBtnPathClick(Sender: TObject);
  536. begin
  537.        OpenDialog1.Filter := 'Execute File (*.exe,*.com)|*.EXE;*.COM;*.DLL|All File (*.*)|*.* ';
  538.       OpenDialog1.Execute;
  539.       PathEdit.Text:=OpenDialog1.FileName;
  540. end;
  541. end.