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;