Prozesse abschießen



  • Hi Leutz!
    Kann man irgendwie Prozesse abschießen? Außer mit Sendmessage(WM_CLOSE) oder TerminateProcess?

    Ich meine RICHTIG abschießen, so wie es der Taskmanager macht?
    mfg Perner



  • richtiger abschießen als mit TerminateProcess geht wohl kaum



  • Ja, mit TerminateProcess kannst du einen Process ohne Nachfrage beenden. So wird es wahrscheinlich auch der Taskmanager machen.

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminateprocess.asp

    TerminateProcess initiates termination and returns immediately. This stops execution of all threads within the process and requests cancellation of all pending I/O. The terminated process cannot exit until all pending I/O has been completed or canceled.

    A process cannot prevent itself from being terminated.



  • Bei mir gibt es einige Prozesse, bei denen wirft die TerminateProcess funktion einfach false zurück und beendet sie nicht 😕

    Mit dem Taskmanager geht dies jedoch ohne Probleme!
    Was macht der Taskmanager anders?



  • Vielleicht hat dein Handle auf den Process keine PROCESS_TERMINATE-Rechte ?



  • Und wenn du dir das Privileg SE_DEBUG_NAME setzt, kannst du sogar csrss.exe oder lsass.exe beenden - huiiii 🤡



  • Und wie bzw. wo muss ich mir dieses Privileg setzen?
    Ich habe da was von Privileg Token oder sowas gelesen, jedoch net so ganz verstanden ¿?

    Sorry das ich so dumme fragen stelle, aber jeder hat doch ma angefangen oder? :p



  • Servus,

    hab nur dne Beitrag schnell überflogen..

    Wenn du einen Prozess via Namen killen willst :

    BOOL KillProcessByName(char *szProcessToKill)
    {
    HANDLE hProcessSnap;
    HANDLE hProcess;
    PROCESSENTRY32 pe32;
    DWORD dwPriorityClass;
    
    hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
    
    if( hProcessSnap == INVALID_HANDLE_VALUE )
      {
        printError( "CreateToolhelp32Snapshot (of processes)" );
        return( FALSE );
      }
    
    pe32.dwSize = sizeof( PROCESSENTRY32 );
    
    if( !Process32First( hProcessSnap, &pe32 ) )
      {
        printError( "Process32First" );  
        CloseHandle( hProcessSnap );     
        return( FALSE );
      }do{
        if(!strcmp(pe32.szExeFile,szProcessToKill))
      {
      printf("Prozess: %s \n",pe32.szExeFile);
      printf("PID: %d \n",pe32.th32ProcessID );  
    hProcess = OpenProcess(PROCESS_TERMINATE,0, pe32.th32ProcessID);
    TerminateProcess(hProcess,0);
    CloseHandle(hProcess);
      } 
      } while( Process32Next(hProcessSnap,&pe32) );
    
    CloseHandle( hProcessSnap );
    return( TRUE );
    }
    

    Gruß Alpha2



  • Das Debug-Privileg gäbe es so, aber das wirst du ja wie gesagt nicht brauchen, sofern du keine Systemprozesse killen willst, was ich auch nicht unbedingt empfehlen würde 😉

    DWORD SetDebugPrivilege() {
        HANDLE hToken = 0;
        DWORD dwError = 0;
        TOKEN_PRIVILEGES privileges;
    
        if( !OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken ) ) {
            dwError = GetLastError();
            goto exit;
        }
    
        if( !LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&privileges.Privileges[0].Luid)) {
            dwError = GetLastError();
            goto exit;
        }
    
        privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        privileges.PrivilegeCount = 1;
    
        if(!AdjustTokenPrivileges(hToken,FALSE,&privileges,0,NULL,NULL)) {
            dwError = GetLastError();
            goto exit;
        }
    
     exit:
    	if(hToken) {
    		CloseHandle(hToken);
    	}
    
        return dwError;
    }
    


  • ich glaube, http://www.winapi.net/index.php?inhalt=s30 könnte dir helfen

    meiner meinung nach ist das eine gute "notbremse"



  • Das hat ja nur den Sinn, den Threadeigenen Speicher (Stack, etc) freizugeben, nachdem er auf nicht planmäßige Weise beendet wurde. Das ist ja aber nur der Fall, weil sich alle Threads eines Prozesses den Speicher teilen. Wenn man einen Prozess terminiert, werden vom Betriebssystem automatisch alle Resourcen aufgeräumt, von daher bringt diese Lösung nichts.


Anmelden zum Antworten