![]() |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
So isses besser, imho.
Delphi-Quellcode:
function IsWindowsFirewallServiceActive: Boolean;
var SCM, hService: LongWord; sStatus: TServiceStatus; dwStat: Cardinal; begin SCM := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); if SCM <> 0 then begin hService := OpenService(SCM, PChar('SharedAccess'), SERVICE_QUERY_STATUS); if hService = 0 then //Vista,Win7 hService := OpenService(SCM, PChar('MpsSvc'), SERVICE_QUERY_STATUS); try if (hService <> 0) then begin if (QueryServiceStatus(hService, sStatus)) then begin result := sStatus.dwCurrentState = SERVICE_RUNNING; exit; end; end; finally CloseServiceHandle(SCM); CloseServiceHandle(hService); end; end; raise EAccessViolation.Create('Could not determine Firewall Service status'); end; |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
Hi!
Vielen Dank für deine Mühe. Und genau für sowas ist eben diese Sparte da! Ciao, Frederic |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
Hi!
Also meine Tests zeigen mit deinem Code folgendes: Vista Ultimate, 64 Bit: Test liefert false, egal ob Firewall-Service läuft oder nicht Win XP - Home, 32 Bit: Test liefert richtige Ergebnisse Ciao, Frederic |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
D.h. sStatus.dwCurrentState muss einen anderen Wert haben, als der angezeigte. Gib ihn einfach mal aus.
|
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
Hi!
Also was mir aufgefallen ist: hService ist nicht 0 wie ich es vermutet hätte, wenn ich deinen Kommentar hindert dem if lese. Wenn ich mir sStatus.dwCurrentState ausgeben lasse ist es 1, wenn der Service läuft und ebenfalls 1, wenn er nicht läuft... Wenn ich den Code so verändere, dass er immer
Delphi-Quellcode:
ausführt, funktioniert der Test einwandfrei (Rückgabewert 4=SERVICE_RUNNING, wenn er läuft).
hService := OpenService(SCM, PChar('MpsSvc'), SERVICE_QUERY_STATUS);
Es liegt also nicht an sStatus.dwCurrentState, sondern es liegt daran, dass hService nicht 0 ist, obwohl es Vista ist... (hService hat immer wechselnde Werte). Ciao, Frederic |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
Tut mir leid, das ist ein Denkfehler gewesen.
Der SharedAccess-Dienst ist unter XP "Windows-Firewall/Gemeinsame Nutzung der Internetverbindung", während in Vista es nur noch "Gemeinsame Nutzung der Internetverbindung" ist. Die WF ist ein eigener "Dienst". Wir testen daher zuerst auf den Vista-Fall, da der in XP fehlschlägt (wenn kein anderer Dienst so heißt - muss ggf. noch mehr überprüft werden).
Delphi-Quellcode:
function IsWindowsFirewallServiceActive: Boolean;
var SCM, hService: LongWord; sStatus: TServiceStatus; dwStat: Cardinal; begin SCM := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); if SCM <> 0 then begin //Vista,Win7 hService := OpenService(SCM, PChar('MpsSvc'), SERVICE_QUERY_STATUS); if (hService = 0) and IsWindowsXP then hService := OpenService(SCM, PChar('SharedAccess'), SERVICE_QUERY_STATUS); try if (hService <> 0) then begin if (QueryServiceStatus(hService, sStatus)) then begin result := sStatus.dwCurrentState = SERVICE_RUNNING; exit; end; end; finally CloseServiceHandle(SCM); CloseServiceHandle(hService); end; end; raise EAccessViolation.Create('Could not determine Firewall Service status'); end; |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
Hi!
Wenn ich versuche den Code zu testen, sagt er: Zitat:
Ciao, Frederic |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
IsWindowsXP kannst du mit jeder beliebigen Funktion ersetzen, die auf XP (ggf. noch >= SP2) prüft, da die IsWindowsFirewallServiceActive sonst unter Win2000 TRUE zurückliefert.
|
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
IsWindowsXP kannst du mit jeder beliebigen Funktion ersetzen, die auf XP (ggf. noch >= SP2) prüft, da die IsWindowsFirewallServiceActive sonst unter Win2000 (bzw. XP SP0/1) TRUE zurückliefert.
(Kann sein, dass DP gerade einen Schluckauf hat? Posts editieren oder adden dauert extrem lange oder funktionieren garnicht. :gruebel: ) |
Re: Windows Firewall - Eintrag erstellen / löschen / ändern
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz