TerminateProcess
-
hi
#include <windows.h> #include <iostream> //kernel32.lib int main() { HANDLE hnd = OpenProcess(PROCESS_TERMINATE, TRUE, DWORD(4)); if(hnd == NULL) return -1; BOOL error = TerminateProcess(hnd, 0); if(error != FALSE) std::cout << "laeuft" << std::endl; CloseHandle(hnd); }
wieso sagt mir terminateprocess nun, dass ich den system-process beendet habe?
mich irritiert schon, dass openprocess mit PROCESS_TERMINATE zu funktionieren scheint.ist dieser weg allg. nicht geeignet, einen beliebigen prozess (mit gegebener PID) zu beenden? oder ist es nur der system-prozess, der hier aus der reihe tanzt?
ziel ist es (offensichtlich) anhand einer gegebenen pid den zugehörigen prozess zu beenden. es wäre schön, wenn ich eine direkte verlässliche angabe hätte, ob dies gelungen ist, oder nicht.
danke, bb
-
Zwar ein wenig exotisch, aber wie wär's mit
system("taskkill /f /pid PID");
Ist imo sehr zuverlässig und gibt auch das gewünschte Feedback.
Für mehr Infos: Hier.
-
ich mag system(...) aber nicht...^^
-
Ich weiß nicht, wie du das hinbekommen hast, auf meinem XP System bekomme ich selbst mit Administrator-Rechten einen `ERROR_ACCESS_DENIED
beim
TerminateProcess/GetLastError` Aufruf.
-
win7 (prof) / x64
bin als admin angemeldet.egal, ob ich's als nutzer(auch mit explizit als admin ausführen) oder per SYSTEM ausführen lasse - ich bekomme immer wieder gesagt, dass es erfolgreich beendet wurde.
mit 0 oder nicht existierenden PIDs bekomme ich von OpenProcess ganz normal NULL zurück. das einzige, was mir bisher aufgefallen ist, dass er bei der pid=4 das falsche zurück gibt.
-
Seltsam.. Bei mir schlägt schon OpenProcess fehl (Acces Denied), trotz vorhandener Rechte.
Naja ich würde dir raten einfach die PIDs 0 und 4 abzufangen da du die Prozesse eh nicht beenden kannst (und willst).
-
DarkShadow44 schrieb:
Seltsam.. Bei mir schlägt schon OpenProcess fehl (Acces Denied), trotz vorhandener Rechte.
Naja ich würde dir raten einfach die PIDs 0 und 4 abzufangen da du die Prozesse eh nicht beenden kannst (und willst).
ne, 0 muss nicht; funzt wie erwartet. nur die 4 eben nicht. wollte nur wissen, ob ich irgendwo nen fehler habe...
danke : >
-
phanzy schrieb:
Zwar ein wenig exotisch, aber wie wär's mit
system("taskkill /f /pid PID");
Ist imo sehr zuverlässig und gibt auch das gewünschte
Das ist aber schlechter Stil, zumal unnötiger Kram berechnet wird. Warum eine andere Anwendung aufrufen, wenn du direkt selbst die WinAPI dafür nutzen kannst? Ob der Rückgabewert von system() dann überhaupt etwas mit dem Erfolg von taskkill zu tun hat, weiß ich jetzt nicht. Selbst wenn... die CPU muss trotzdem viel zu viel unnötigen Kram bei diesem Aufruf berechnen, was man mit direktem Ansteuern der entsprechenden WinAPI-Funktionen vermeiden kann.
-
Oh nein, 3ms kostbare CPU-Zeit verschwendet!
-
nwp3 schrieb:
Oh nein, 3ms kostbare CPU-Zeit verschwendet!
Sagt dann wohl jemand, der keinen Dunst von der Materie hat.