Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Windows Firewall - Eintrag erstellen / löschen / ändern (https://www.delphipraxis.net/130013-windows-firewall-eintrag-erstellen-loeschen-aendern.html)

Dezipaitor 4. Mär 2009 18:53

Re: Windows Firewall - Eintrag erstellen / löschen / ändern
 
Zitat:

Zitat von sirius
Ja das hoffe ich doch. Und selbst da finde ich es unbefriedigend.

Verstehe ich das nur grad falsch? Warum kann ein Programm sich eigenhändig in die ExceptionList meiner Firewall eintragen? Ich hoffe mal dass das nicht geht.

Der ursprüngliche Code fragt nur den FW Status ab. Aber das macht er, indem er erstmal alle Rechte anfordert. Das ist aber falsch, wenn man nur mal was lesen will, da man in diesem Fall immer Adminrechte braucht. Mit dem Rest hat das nichts zu tun. Schreibend braucht man da sowieso Adminrechte - aber lesend nicht unbedingt.

fkerber 4. Mär 2009 18:54

Re: Windows Firewall - Eintrag erstellen / löschen / ändern
 
Hi!

Ich habe nun diese genommen:

Delphi-Quellcode:
function IsWindowsXP: Boolean;
begin
  Result := (Win32MajorVersion = 5) and ( Win32MinorVersion = 1);
end;
Und damit funktioniert der Test vollkommen zufriedenstellend!
Danke für deine Mühe - ich werde es im Beitrag ergänzen/austauschen.


@Sirius:
Ich glaube die Aussage war nur auf die IsWindowsFirewallServiceActive-Funktion bezogen...


Ciao, Frederic

Dezipaitor 4. Mär 2009 18:59

Re: Windows Firewall - Eintrag erstellen / löschen / ändern
 
Du musst auf SP2 oder höher testen. Sonst kommt wieder ein TRUE raus!

fkerber 4. Mär 2009 20:02

Re: Windows Firewall - Eintrag erstellen / löschen / ändern
 
Hi!

Ist das hier eine praktikable Lösung? Es sieht nicht danach aus, aber was besseres ist mir nicht präsent...

Delphi-Quellcode:
function IsWindowsXP: Boolean;
begin
  Result := (Win32MajorVersion = 5) and ( Win32MinorVersion = 1) and (strtoint(copy(Win32CSDVersion,length(Win32CSDVersion),1))>=2);
end;

Ciao, Frederic

shmia 5. Mär 2009 15:26

Re: Windows Firewall - Eintrag erstellen / löschen / ändern
 
Falls irgend möglich würde ich auf das Abfragen der Windows Version verzichten.
Beispiel:
Die Funktion GetDefaultPrinterA() gibt es erst ab Windows 2000 (und höher).
Man könnte jetzt die Windowsversion abfragen und dann so reagieren:
Wenn WindowsVersion >= 2000 dann verwende GetDefaultPrinterA() anderfalls schau in die Registry oder die Win.ini.

Eine andere Strategie wäre mit GetProcAddress() zu prüfen, ob es die Funktion GetDefaultPrinterA() gibt.
Falls ja, benütze die Funktion, falls nein, erfolgt ein Fallback auf die älteren Alternativen.
Eine (unsichere) Abfrage der Windows Version wird hier nicht nötigt.

Übertragen auf die Firewall Geschichte heisst das:
Zuerst prüfen, ob die modernste API verfügbar ist (also ob die ProgID 'HNetCfg.FwMgr' registriert ist).
Falls nicht arbeite mit der API der älteren Windows Versionen.
Villeicht kommt ja ein Servicepack, der fehlende Funktionalität in den älteren Windowsversionen nachrüstet.
ok, ich glaube nicht mehr an den Weihnachtsmann, aber so ist man auf alles gerüstet :-)

Dezipaitor 5. Mär 2009 16:36

Re: Windows Firewall - Eintrag erstellen / löschen / ändern
 
Hier geht es nicht um die Verfügbarkeit einer API Funktion, sondern, ob ein Dienst eine FW implementiert hat oder nur die "Gemeinsame Internetnutzung". In XP < SP2 gibt es keine FW, und so würde ohne die Abfrage, trotzdem ermittelt, dass eine Windows Firewall existiert.

Natürlich geht es hier nur um die Windows Interne FW. 3rd Party FW sind nicht abgedeckt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz