Keine Rechte um Prozess zu beenden

heino81

Grünschnabel
Hallo alle zusammen,

ich habe eine Dialoganwendung mit der ich ein Kommandozeilentool steuern kann. Nun startet dieses Kommandozeilenprogramm ein weiteres Programm unter dem Benutzer SYSTEM. Über den Taskmanager kann ich diesen Prozess beenden, jedoch nicht aus meiner grafischen Oberfläche heraus. Das ganze mache ich wie folgt:

Code:
 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE, 1723);
   DWORD dw = GetLastError();
   TerminateProcess(hProcess,1);

Jedoch bekomme ich nach dem OpenProcess schon die Fehlernummer 5 (Access is denied) zurückgeliefert. Hat jemand eine Idee woran das liegen könnte. Die Dialoganwendung wird unter dem selben Benutzer gestartet unter dem ich diesen Prozess auch von Hand im Taskmanager beenden kann.

Gruß Chris
 
Hi du,
also das eigentliche Problem ist nicht das beenden sondern der allgemeine Zugriff per Handle auf das Prog.
Dein Programm A startet also das Kommandz. Prog. K.
Beim Start erhältst du also schon ein Handle (zumindest wenn du das ganze über CreateProcess startest). Wieso holst du dir also erneut ein Handel?

Vermutlich kannst du über das Start Handle deinen Prozess korrekt beenden.

Frarr
 
Also ich habe für das Vmware Disk Mount Utility ( Tool zum Einhängen von Vmware Images in das Windows System) ein grafische Oberfläche geschrieben aus der ich das Kommandozeilenprogramm (vmware-mount.exe) aufrufe. Dieses startet einen weiteren Prozess (vmount2.exe) der dafür sorgt das ich auf die Daten in dem Image zugreifen kann. Diesen neu gestarteten Prozess der als Benutzer SYSTEM läuft möchte ich nun beenden.

Chris
 
OpenProcess öffnet doch einen bestehenden Prozess der bereits eine bestehende Prozess ID besitzt. Die Prozess ID wird vom System vergeben und ist damit nicht fest. Du verwendest aber die Id 1723 als feste ID.
Den Prozess den du zu Öffnen versuchst, ist mit Sicherheit nicht der, den du wolltest.

Gruss
Dora
 
Das ist schon klar das die Prozess ID jedesmal einen andere ist. Ich habe das in diesem kleinen Beispiel der Einfachheit halber fest reingeschrieben. In meiner Methode hole ich mir die Liste aller Prozesse und vergleiche den Namen des Prozesses. Ist dieser gleich so lese ich die Prozess ID aus und übergebe sie OpenProcess.

Gruß Chris
 
Zurück