PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Prozess Killen



Reaper14
02.12.2007, 21:13
Hallo,
ich will mit C++ einen Prozess killen.
Also ich bin noch ein noob bei thema C++.
Ich hab schon ein paar versuche gemacht was leider nichts half.
Also kann jemand ein beispiel machen wie z.b. beispiel.exe kille?
Wenn es geht aber bitte nicht nur den Code einfach so reinschreiben und fertg, sonden auch wenn es geht ein bissle erklären.

mfg Reaper

madda
02.12.2007, 22:35
man killt nicht mal so eben ein prozess..... wenn du keine ahnung von c++ hast hilft dir auch ne kleine erklärung nix wenn du nichtmal die basics kannst ;)

ausserdem brauchste dafür sogar reverse engeering was noch ne stufe höher ist ( bin mir da aber nich ganz sicher )

Steav
03.12.2007, 00:00
In c# könntest du den Prozess einfach per Namen suchen, instanziieren und process.Kill(); ausführen.

Weiß nicht, wie das in cpp aussieht, da ich von CPP keine Ahnung hab... aber dafür kannst du ja auf eine API Funktion zugreifen.


Erkundige dich ma über die Funktion TerminateProcess der kernel32.dll
denke google wird da behilflich sein.


:edit:

Google hat mir auch gerade das noch ausgespuckt



/************************************************** **************************
Bestimmt das zum übergebenen Prozess-Exectuable gehörende Prozess-Handle
und gibt es zurück.
Übergabe
strProcessExe Prozess-Executable.
dwDesiredAccess Benötigter Prozess-Zugriff.
Rückgabe
Zugehöriges Handle oder NULL im Fehlerfall.
************************************************** ***************************/

HANDLE GetProcessHandle( CString strProcessExe, DWORD dwDesiredAccess )
{
HANDLE hSnapShot; // System-Snap-Shot-Handle
PROCESSENTRY32 PEntry; // Process-Enumerations-Struktur
HANDLE hProcess; // Prozess-Handle
CString strExeFile; // Hilfssstring
BOOL bOK; // Abbruch-Flag

// Liste aller im System laufenden Prozesse erstellen
hSnapShot=::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

if( hSnapShot==INVALID_HANDLE_VALUE )
// Fehler aufgetreten
return NULL;

// Prozess-Executable in Kleinbuchstaben wandeln
strProcessExe.MakeLower( );


// Prozess-Liste durchlaufen
PEntry.dwSize=sizeof( PEntry );
bOK=::Process32First( hSnapShot, &PEntry );
for( ; bOK; bOK=::Process32Next( hSnapShot, &PEntry )){

// Pozess-ID in Handle umwandeln
hProcess=::OpenProcess( dwDesiredAccess, FALSE, PEntry.th32ProcessID );
if( hProcess==NULL )
// Umwandlung misslungen
continue;

// Prozess-Executable in Kleinbuchstaben wandeln und prüfen
strExeFile=PEntry.szExeFile;
strExeFile.MakeLower( );
if( strExeFile.Find( strProcessExe )!=-1 )
// Passenden Prozess gefunden, Handle zurückgeben
return hProcess;
}

// Nichts Passendes gefunden
return NULL;
}



Damit kannst Du mit



TerminateProcess( GetProcessHandle( "test.exe", PROCESS_TERMINATE ), 0 );



einen laufenden Prozess "test.exe" beenden. Das gelingt aber nur, wenn der ausführende Benutzer auch die entsprechenden Rechte besitzt. GetProcessHandle( ... ) kehrt bei fehlenden Rechten der einem anderen Fehler mit NULL zurück. Des Weiteren musst Du darauf achten, bei der Executable keinen Pfad anzugeben.

Reaper14
03.12.2007, 12:22
Steav ich hatte ein ganz ähnlichen code wie du, hatte bei mir aber noch eininge Probleme die ich nicht lösen konnte. Ich hab jetzt dein Code compilert und es kommen immer noch einige fehler. Funktioniert er bei dir? Wenn ja was mach ich Falsch? Also Compiler verwende ich Visual C++ 2005 Express Edition, denk aber nicht das das so ein unterschied macht.

Sunrise
17.01.2008, 13:04
man killt nicht mal so eben ein prozess.....
system("tskill test"); //Anstatt test, den namen des prozesses.

Fuck war das schwer! :roll:
madda, große reden scchwingen, aber noch nit mal nen noob mit dem einfachsten helfen können. Er hat ja nit gefragt wie man nen System Prozess killt.