![]() |
NT Service unter XP beenden?
Hallo,
wie kann ich einen NT Service unter Win XP beenden? Das Problem an der sache ist, dass ich nicht als Admin dabei eingeloggt bin! Gibts da irgendwelche Wege? Ist wirklich sehr wichtig! Schonmal Danke im voraus! Schönen Abend noch! Delphi-Coder |
Hi,
um Services zu starten/stoppen musst du nicht unbedingt Admin sein, sondern du brauchst einfach die Rechte, Services zu starten und zu stoppen. Hast du die nicht, haste de keine Chance. Aber hier mal bischen Code zum Starten und Stoppen eines NT Services: Start:
Code:
und zum Stoppen:
function ServiceStart(aMachine, aServiceName: String): Boolean;
// aMachine is UNC path or local machine if empty var h_manager, h_svc: SC_Handle; ServiceStatus: TServiceStatus; dwCheckPoint: DWORD; ServiceArgVectors : PChar ; begin h_manager := OpenSCManager(PChar(aMachine), nil,SC_MANAGER_CONNECT); if h_manager > 0 then begin h_svc := OpenService(h_manager, PChar(aServiceName), SERVICE_START or SERVICE_QUERY_STATUS); if h_svc > 0 then begin if (StartService(h_svc, 0, ServiceArgVectors)) then { succeeded } begin if (QueryServiceStatus(h_svc, ServiceStatus))then begin while (SERVICE_RUNNING <> ServiceStatus.dwCurrentState)do begin dwCheckPoint := ServiceStatus.dwCheckPoint; Sleep(ServiceStatus.dwWaitHint); if (not QueryServiceStatus(h_svc,ServiceStatus)) then // couldn't check status break; if (ServiceStatus.dwCheckPoint < dwCheckPoint)then break; end; end; end; CloseServiceHandle(h_svc); end; CloseServiceHandle(h_manager); end; Result := (SERVICE_RUNNING = ServiceStatus.dwCurrentState); end;
Code:
Gruß,
function ServiceStop(aMachine, aServiceName:String): Boolean;
// aMachine is UNC path or local machine if empty var h_manager, h_svc: SC_Handle; ServiceStatus: TServiceStatus; dwCheckPoint: DWORD; begin h_manager := OpenSCManager(PChar(aMachine), nil,SC_MANAGER_CONNECT); if h_manager > 0 then begin h_svc := OpenService(h_manager, PChar(aServiceName), SERVICE_STOP or SERVICE_QUERY_STATUS); if h_svc > 0 then begin if (ControlService(h_svc, SERVICE_CONTROL_STOP,ServiceStatus)) then begin if (QueryServiceStatus(h_svc, ServiceStatus))then begin while (SERVICE_STOPPED <> ServiceStatus.dwCurrentState)do begin dwCheckPoint := ServiceStatus.dwCheckPoint; Sleep(ServiceStatus.dwWaitHint); if (not QueryServiceStatus(h_svc,ServiceStatus)) then // couldn't check status break; if (ServiceStatus.dwCheckPoint < dwCheckPoint)then break; end; end; end; CloseServiceHandle(h_svc); end; CloseServiceHandle(h_manager); end; Result := (SERVICE_STOPPED = ServiceStatus.dwCurrentState); end; Tom |
Danke für die schnelle Antwort! Was muss ich denn für die Variable aMachine an die Funktion übergeben?
|
Einen Punkt '.', wenn es der gleiche Rechner ist sollte genügen.
...:cat:... |
Danke für die Hilfe! Es gibt da nur ein kleines Problem: Ich bin nicht als Admin eingeloggt und hab nicht die Berechtigung einen Service zu beenden!!! :( Gibt es da wirklich keinen anderen Weg???
|
Zitat:
...:cat:... |
Re: NT Service unter XP beenden?
Huhu,
also ich habe mir auch mal den Code vorgenommen und versucht einen Service zu starten, leider passiert garnichts. Muss ich bei Servie Name den Namen übergeben den ich auch bei den Diensten angezeigt bekomme? Also z.B "pcAnywhere Host Service" Danke im voraus |
Re: NT Service unter XP beenden?
Nein, den Schlüsselnamen eines Unterschlüssels von:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es mußt du angeben. Da liegen all die Services :) PS: Wenn du Debugrechte hast, kannste dir SYSTEM-Rechte holen und dann den Service starten/stoppen. |
Re: NT Service unter XP beenden?
Sofern du das SeDebugPrivilege hast (und auch aktiviert hast) kannst du dir ein gültiges Process-Handle auf den Service holen und ihn per TerminateProcess abschießen...
|
Re: NT Service unter XP beenden?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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