Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Widerspenstigen Prozess beenden (https://www.delphipraxis.net/7372-widerspenstigen-prozess-beenden.html)

MechMac 10. Aug 2003 18:30


Widerspenstigen Prozess beenden
 
Hallo!

Ich habe bei mir einen Prozess am laufen welchen ich nicht beenden kann.
Nicht einmal der Taskmanager von Windows kann den killen.

Es wird auch keine Fehlermeldung ausgegeben.
Der Prozess läuft unter Win XP über den Benutzernamen: SYSTEM

Da ich als Administrator eingeloggt bin hab ich doch eigentlich die Rechte dazu, oder?

Kennt zufällig jemand einen Code der mir diesen Prozess beendet?

Mfg, MechMac

CalganX 10. Aug 2003 18:35

Re: Widerspenstigen Prozess beenden
 
Hi,
wenn sich ein Prozess nicht beenden lässt, dann hat das auch einen Grund. Wenn es aber ein Prozess ist, der nicht Windowseigen ist, dann musst du in den sauren Apfel beißen und rebooten. Wenn da nichts hilft, dann musst du die Datei/den Service löschen/stoppen.

Einen Source für Delphi, mit dem du einen Prozess killen kannst, ohne dass du gehindert wirst gibt es nicht. Delphi kann auch nicht mehr als Windows. ;)

Chris

Marco Haffner 10. Aug 2003 18:36

Re: Widerspenstigen Prozess beenden
 
Scheint ein Dienst zu sein: Start > Systemsteuerung > Verwaltung>Dienste (oder Rechtsklick auf Arbeitsplatz > Computerverwaltung) Aber vorsicht beim beenden von einigen Diensten.

jbg 10. Aug 2003 18:41

Re: Widerspenstigen Prozess beenden
 
Zitat:

Zitat von Marco Haffner
Aber vorsicht beim beenden von einigen Diensten.

Dem kann ich nur zustimmen. Wenn man nämlich den "richtigen" Dienst beendet, hat man eine Boot-Schleife gebastelt. Der Rechner fährt hoch und fährt automatisch herunter. Danach fährt er wieder automatisch hoch ...

Marco Haffner 10. Aug 2003 18:43

Re: Widerspenstigen Prozess beenden
 
Aber dafür gibt es dann die Wiederherstellungskonsole...

MechMac 10. Aug 2003 18:43

Re: Widerspenstigen Prozess beenden
 
Es ist ja nicht so das dieser Prozess nicht mehr reagiert oder so. Ich kann das dazu gehörige Fenster Maximieren und die Anwendung dann über das "x" beenden. Das will ich aber nicht jedes Mal machen, daher möchte ich das ganze von Delphi aus beenden.

Christian Seehase 10. Aug 2003 22:57

Re: Widerspenstigen Prozess beenden
 
Moin MechMac,

wenn der Benutzer System ist kannst Du getrost davon ausgehen, dass es sich um einen Dienst handelt.
System hat höhere Rechte als ein Admin, und deshalb kannst Du den Prozess auch nicht als Admin "abschiessen".

@jbg:
Zitat:

Zitat von jbg
Dem kann ich nur zustimmen. Wenn man nämlich den "richtigen" Dienst beendet, hat man eine Boot-Schleife gebastelt.

Wenn man den Dienst nur beendet, aber die Startart nicht verändert halte ich das eher für unwahrscheinlich. Beim Reboot würde ja die ursprüngliche Startart wieder greifen.

Assarbad 10. Aug 2003 23:16

Re: Widerspenstigen Prozess beenden
 
System IST KEIN PROZESS!!! Es ist eine Art "virtueller" Prozeß, welcher das System symbolisiert. Er ist aber weder zu beenden (auch mit SYSTEM-Rechten nicht) noch kann man diverse seiner Eigenschaften auslesen. (Andere hingegen schon).

Services/Dienste/Daemons kann man als Administrator aus gutem Grunde nicht killen (ACLs). Gleiches gilt für dein Programm unter dem Usernamen SYSTEM! Als SYSTEM kannst du es aber. Wenn dir daran was liegt (macht aber wenig Sinn, solange der Service okay ist), kannst du meine LocalSystem-Programme probieren. Aus der Konsole startest du dann den Taskmanager und killst nen Prozeß. winlogon.exe kann man so auch killen, was aber zB zum BlueScreen führt. Wenn man so hört wie du experimentierst (OHNE VORHER Informationen über den vermeintlichen Prozess einzuholen), kann man ja nur glücklich sein, daß Treiber nicht Prozesse in diesem Sinne sind :?

Christian Seehase 10. Aug 2003 23:22

Re: Widerspenstigen Prozess beenden
 
Moin Assarbad,

Zitat:

Zitat von Assarbad
System IST KEIN PROZESS!!! Es ist eine Art "virtueller" Prozeß, welcher das System symbolisiert.

Vom Prozess "System" hat hier bislang niemand gesprochen ;-)

Zitat:

Zitat von MechMac
Der Prozess läuft unter Win XP über den Benutzernamen: SYSTEM

Zitat:

Zitat von Assarbad
Und wenn du nicht weißt, womit du experimentierst, dann laß es lieber!

Das ist natürlich auch wieder richtig.

Assarbad 10. Aug 2003 23:26

Re: Widerspenstigen Prozess beenden
 
@Christian: Hatte es bereits gemerkt und behoben ;) siehe 2. Absatz.

Motzi 11. Aug 2003 08:38

Re: Widerspenstigen Prozess beenden
 
Sofern man über das SeDebugPrivilege verfügt (und es auch aktiviert) kann man auch Services "abschießen". Als Administrator verfügt man zwar über dieses Privilege, allerdings ist es standardmäßig immer deaktiviert. Wenn man das SeDebugPrivilege für den Taskmanager aktivieren würde könnte man auch über diesen diverse Services "abschießen".

Assarbad 11. Aug 2003 12:21

Re: Widerspenstigen Prozess beenden
 
Naja, das Debug-Privileg ermöglicht ja auch bspw einfach nen SYSTEM-Prozess zu übernehmen. Soweit ich es verstanden habe bedeutet aktiviertes Debug-Privileg, daß man an alle anderen Rechte rankommen kann. Also Motzi's Methode ist auch machbar.

Aber nochmal: Services sollte man nicht killen! Ich hatte schon Stellen, wo es nötig war um danach das System zumindest sauber runterzufahren ... aber sowas passiert dir wahrscheinlich auch nur, wenn du über mehrere Jahre mehrere Rechner verwalten mußt ;)

MechMac 11. Aug 2003 16:28

Re: Widerspenstigen Prozess beenden
 
Mal ne ganz blöde Frage: Wie aktiviere ich denn das SeDebugPrivilege ?

Motzi 11. Aug 2003 16:32

Re: Widerspenstigen Prozess beenden
 
Delphi-Quellcode:
const
  SE_DEBUG_NAME = 'SeDebugPrivilege';

procedure EnableDebugPrivilege;
var
  hToken : THandle;
  tp    : TTokenPrivileges;
begin
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then
  begin
    tp.PrivilegeCount := 1;
    LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);
    tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, False, tp, SizeOf(tp), nil, DWord(nil^));
    if GetLastError <> ERROR_SUCCESS then
      Application.MessageBox('Couldn''t enable Debug-Privilege!',
                             'No Debug-Privilege', MB_ICONWARNING or MB_OK);
    CloseHandle(hToken);
  end;
end;

Assarbad 11. Aug 2003 17:28

Re: Widerspenstigen Prozess beenden
 
Schreibst du da fuer jedes Privileg ne extra Funktion?

Motzi 11. Aug 2003 17:42

Re: Widerspenstigen Prozess beenden
 
Ne, hab das jetzt nur mal so mehr oder weniger 1 zu 1 aus meinem X-Spy rauskopiert (und der braucht eben nur das Debug-Privilege)... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz