Witam :-)
Jeden z moich starychhhh artów tym razem na temat obsługi wbudowanego firewall'a systemowego znajdującego się w Windows XP z zainstalowanym Service Pack 2.
Życzę miłej lektury :-)
1.Rejestr :
1.1. Wyjątki
Oto przykładowy wyeksportowany klucz z rejestru dla wyjątku Gadu-Gadu :
odrazu widać iż aby dodać program do wyjątku w pomocy pliku *.reg należy go zapisać w następującej formie w gałęzi :Kod:Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesSharedAccessParametersFirewallP olicyStandardProfileAuthorizedApplicationsList] "C:Program FilesGadu-Gadugg.exe"="C:Program FilesGadu-Gadugg.exe:*:Enabled:Gadu-Gadu - program glowny"
"lokalizacja(podwójny slash)"="lokalizacja(podwojny slash):*:dostep_badz_nie:wyswietlana_nazwa"
1.2. Wyłączenie bądź włączenie firewall'a
Wartości pozwalające na włączenie bądź wyłączenie firewall'a zmieniami w tej oto gałęzi :
Aby włączyć należy ustawić dla "EnableFirewall" wartość 1 zaś by wyłączyć wartość 0 :Kod:Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesSharedAccessParametersFirewallP olicyStandardProfile]
"EnableFirewall"=dword:00000001
lub
"EnableFirewall"=dword:00000000
1.3. Wyłączenie bądź włączenie obsługi wyjątków
Lokalizacja klucza jest identyczna jak w punkcie poprzednim, z tą różnicą iż wartość 1 dla "DoNotAllowExceptions" wyłącza obsługę wyjątków natomiast 0 włącza , należy pamietać aby firewall był włączony gdyż wówczas aktywacja obsługi wyjątków mija sie z celem :
"DoNotAllowExceptions"=dword:00000001
lub wyłaczenie
"DoNotAllowExceptions"=dword:00000000
2. Delphi :
Należy pamietać iż do każdego unitu do uses dodajemy Registry, dzięki któremu możemy obsługiwać rejestr przy pomocy Delphi.
2.1 Dodanie i usuwanie wyjątków :
Można zrobić to na 2 sposoby, oto 1 z nich :
Procedura ta jest wywoływana w nastepujący sposób :Kod:procedure WyjatekSP2(aktywuj: Boolean); var reg: TRegistry; sp2 : string; begin reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; //rozpoczynamy otwieranie każdej gałęzi z osobna sp2:=Application.ExeName; //pobranie lokalizacji w której uruchomiono nasz program reg.OpenKey('System', True); reg.OpenKey('ControlSet001', True); reg.OpenKey('Services', True); reg.OpenKey('SharedAccess', True); reg.OpenKey('Parameters', True); reg.OpenKey('FirewallPolicy', True); reg.OpenKey('StandardProfile', True); reg.OpenKey('AuthorizedApplications', True); reg.OpenKey('List', True); if aktywuj = True then begin reg.WriteString(sp2,sp2+':*:Enabled:'+ExtractFileName(sp2)); // zapisanie wyjątku wg. opisu z punktu 1.1, natomiast nazwą własną będzie nazwa naszego projektu end else if aktywuj = False then begin reg.DeleteValue(sp2); //usunięcie wyjątku end; reg.CloseKey; end;
WyjatekSP2(true) - wówczas nasz program jest dodany wyjątków
WyjatekSP2(false) - wówczas jest usuniety z wyjątków
Druga metoda jest ciut podobna, a polega na rozłożeniu dodawania i usuwania wyjątków na 2 procedury, które należy zadeklarowaa w naszym programie , dlatego też nie będe opisywać poszczególnych linii :
Aby dodać nasz program do wyjątków wystarczy odwołać sie do procedury : wyjatekdodaj;Kod:procedure TForm1.wyjatekdodaj; //dodanie wyjątku var rejestr: TRegistry; sp2: string; begin sp2:=Application.ExeName; rejestr:=TRegistry.Create; rejestr.RootKey:=HKEY_LOCAL_MACHINE; rejestr.OpenKey('SYSTEMControlSet001Services SharedAccessParametersFirewallPolicy StandardProfileAuthorizedApplicationsList',False); rejestr.WriteString(sp2,sp2+':*:Enabled:'+ExtractFileName(sp2)); rejestr.Free; end;
Aby usunąć nasz program z wyjątków wystarczy odwołać sie do procedury : wyjatekusun;Kod:procedure TForm1.wyjatekusun; //usuwanie wyjątku var usunrej: TRegistry; sp2: string; begin sp2:=Application.ExeName; usunrej:=TRegistry.Create; usunrej.RootKey:=HKEY_LOCAL_MACHINE; usunrej.OpenKey('SYSTEMControlSet001Services SharedAccessParametersFirewallPolicy StandardProfileAuthorizedApplicationsList',true); usunrej.DeleteValue(sp2); usunrej.DeleteValue(sp2+':*:Enabled:'+ExtractFileName(sp2)); usunrej.CloseKey; usunrej.Free; end;
Natomiast jeśli chcemy do wyjątków dodać inny program niż nasz uruchomiony wówczas wystarczy zmienić w danej procedurze zmienną sp2 z Application.ExeName na lokalizacje pliku który sobie życzymy np: 'c:windowstrojan.exe'
2.2 Włącz , wyłącz firewall
Opiszę tu tylko 1 metodę gdyż uważam że jest łatwiesza, ale oczywiście można zrobić to na ten 2 sposób zmieniając odpowiednie gałęzie i klucze wg. metody 1, ale to już wedle uznania :
Procedura ta jest wywoływana w następujący sposób :Kod:procedure WylaczSP2(aktywuj: Boolean); var reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey('System', True); reg.OpenKey('ControlSet001', True); reg.OpenKey('Services', True); reg.OpenKey('SharedAccess', True); reg.OpenKey('Parameters', True); reg.OpenKey('FirewallPolicy', True); reg.OpenKey('StandardProfile', True); if aktywuj = True then begin reg.WriteInteger('EnableFirewall',0); //wartość 0 wyłącza firewall'a end else if aktywuj = False then begin reg.WriteInteger('EnableFirewall',1); //wartość 1 włącza firewall'a end; reg.CloseKey; end;
WylaczSP2(true) - wyłączenie FW
WylaczSP2(false) - włączenie FW
Należy zwrócić uwage iż wartości w tym kluczu nie są już REG_SZ (stringiem) a DWORD (integer) dlatego są ciut inaczej zapisywane tzn. poprzez WriteInteger, a nie jak w punkcie 2.1 (WriteString).
2.3 Włącz , wyłącz obsługe wyjątków
Przyszedł czas na ostatni punkt tego artykułu, procedura będzie identyczna jak w punkcie poprzednim jedynie z tą różnicą iż nazwe wartości EnableFirewall zamieniamy na DoNotAllowExceptions, dla true można ustawia wartość 1 aby nie zezwalać na wyjątki natomiast dla false wartość 0 aby wyjątki były możliwe. Dodatkowo można ustawić dla false aby firewall był włączony bo wkońcu po co włączać obsługę wyjątków skoro FW jest niedostępny ;-)
ThE End![]()


Odpowiedź z Cytatem