[C#] Gesützten Prozess beenden

CFI

Lt. Commander
Registriert
Mai 2003
Beiträge
1.390
Hi,

gibt es eine möglichkeit einen geschützten Prozess, wie z.B. Antivirus oder Firewall mit einem Programm beenden?
Normale Prozesse kann ich ohne Probleme mit .CloseMainWindow() oder .Kill() beenden, aber bei geschützten Prozessen bringt der JIT eine Exeption mit zugriff verweigert.
Geht das irgendwie?
Hintergrund der Sache ist dieser Thread.

mfg
Capt.Iglo
 
Prozesse, die Dir nicht gehören darfst Du nur dann beenden, wenn Du über ausreichend Rechte verfügst. Dies gilt auch für Mitglieder der Administratorgruppe. Administratoren haben von Grund auf keine Rechte an Prozessen, die von SYSTEM gestartet wurden. Versuch mal im Taskmanager als Administrator einen Prozess von SYSTEM zu beenden. ;) (Man kann dem Administrator u.U. diese Rechte geben - sollte man aber tunlichst vermeiden!)

Das Problem ist, dass Dienste immer mit SYSTEM-Rechten laufen, es sei denn man stellt einen anderen User ein. Entweder hältst Du die Dienste über einen Aufruf von "net stop <dienst>" an, oder Du hängst Dich in den Service Control Manager ein. Wie letzteres geht, kann ich Dir spontan leider nicht sagen, da müsste ich mich auch erst einarbeiten.

Edit:
Versuchs mal hiermit:
http://msdn.microsoft.com/library/d...n-us/dllproc/base/service_control_manager.asp


Edit2:
Du solltest etwas in dieser Art hier produzieren (in C++). Fehlerprüfung fehlt ganz - kompiliert hab ich auch nicht ;)
Code:
SC_HANDLE scManager = OpenSCManager (0, 0, SC_MANAGER_ALL_ACCESS);
SC_HANDLE scService = OpenService (scManager, "Mein Servicename", SERVICE_ALL_ACCESS);
SERVICE_STATUS scStatus;
ControlService (scService, SERVICE_CONTROL_STOP, &scStatus);
CloseServiceHandle (scService);
CloseServiceHandle (scManager);
 
Zuletzt bearbeitet:
Hi,

du könntest auch mal versuchen, dem Programm per SendMessage einen Shutdown zu simulieren. Vielleicht kannst du es damit beenden.

Gruß

Toaster

P.S.

WM_CLOSE = &H10
WM_DESTROY = &H2
WM_ENDSESSION = &H16
WM_QUERYENDSESSION = &H11

Einer von denen könnte dir helfen
 
Zuletzt bearbeitet:
Einen Dienst trickst Du damit nicht aus, der bekommt eine Meldung vom SCM. Prozesse kannst Du sonst nur beenden, sofern Du wie gesagt die Rechte hast. Für SendMessage / PostMessage (2. wäre zu bevorzugen) muss der entsprechende Prozess erstmal ein Fenster haben. OpenProcess / KillProcess zusammen mit der ToolsApi sind da besser.

Alternativ könnte man sich selbst einen Dienst schreiben. Da dieser dann selbst SYSTEM-Rechte hat, kann man fast alles abschießen (Windows inbegriffen).
 
Zuletzt bearbeitet:
Mal ne dumme Frage aus welcher Klasse stammt SC_HANDLE ?

Ach ja bin bei C++ :D
 
Zuletzt bearbeitet:
Zurück
Oben