Prozess speicher und priorität zuweisen

Eine Frage ...

Kann man einen Prozess beliebig Speicher und Priorität zuweisen.
Am besten in C++ unter Windows (Winapi). Hab nur Bruchstückhaft Informationen gefunden.
 
Hi,

Da ich hauptsächlich mit .Net Arbeite bleibt mir die WinAPI (zum Glück) meistens erspart.

Mit dem Ändern der Priorität hab ich mich früher mal beschäftigt...

Die API Funktion zum ändern der Priorität heißt SetPriorityClass, zum Ermitteln der Priorität nimmst du GetPriorityClass.
Das ganze funktioniert auch für einzelne Threads: GetThreadPriority und SetThreadPriority

Für die Speicherlimits verwendest du jeweils GetProcessWorkingSetSize und SetProcessWorkingSetSize (Achtung: Die "Ex" Versionen dieser Funktion laufen nur mit Vista!)

In der MSDN sind die Funktionen gut beschreiben, ausserdem sind (fast) immer Beispiele in C++ dabei...

Wenn du willst kann ich mal schauen ob ich den Code den ich wegen der Priorität geschreiben habe noch finde.

Gruß Chris
 
Vielen Dank !
Mir wurde bereits gesagt dass C# dafür tolle Hilfsfunktionen anbietet. Das Programm soll für usere Schule eine Überwachungssoftware werden. Das z.B nur bestimmte Prozesse laufen dürfen u.ä. Das Programm sollte daher auch nicht ausschaltbar sein. Und da muss ich mir einen Weg einfallen lassen damit das auch bei C# funktioniert.
 
Hi,

Versteh mich bitte nicht falsch, ich will nicht für C# werben!
Du kannst das ja ohne Probleme unter C++ verwenden...

Nur das Ändern der Priorität ist kein Schutz, das dein Programm nicht beendet wird! Es gibt ja nur an wie viel CPU-Leistung dein Programm benutzen kann. Wenn du es z.B. auf "Realtime" schaltest und eine Endlosschleife Programmierst tut NICHTS mehr und du kannst den PC Resetten, vorausgesetzt es läuft kein anderes Realtime Programm, denn das kann auch noch CPU-Leistung verwenden. Das gleiche ist dann wenn du alle Programme auf niedrig setzt und deins aus Normal lässt.

Ein Programm vor dem Beenden zu schützten geht nicht zu 100%. Was ich hier im Board mal gelesen habe und was sinnvoll ist, dein Programm als Thread von svhost zu registrieren.

Eine andere Möglichkeit wäre mit NT-Diensten. Wenn das Pause/Shutdown Event aufgerufen wird einfach ein extra Programm Starten, das deinen Dienst wieder Aktiviert. So hab ich das bisher immer gemacht. Wobei ich hier wieder anmerken muss, dass es mit .Net leichter geht NT-Dienste zu programmieren.

Andererseits wäre das auch mit Rootkis möglich, was aber sehr viel Komplizierter ist.

Theoretisch müssten die ersten 2 Methoden ausreichen, damit keiner, der es nicht soll schafft das Programm auszuschalten.

Gruß Chris
 
wie wär es einfach mit 2 Prozessen, die sich gegenseitig überwachen? Oder Dein Programm mit mehr Rechten/anderem Konto laufen zu lassen - reicht breits imho aus, um einein NichtAdmin-User daran zu hindern, es abzuschießen.
Eine "Demo" hatte ich hier mal mit 2 Programmen gemacht:
http://hackerboard.de/thread.php?threadid=21363


Wenn das Pause/Shutdown Event
Was ist mit dem TerminateProcess Aufruf ? Damit ist auch möglich, kritische Windowsdienste abzuschießen ;) . Das mit dem "svhost" Schutz kann zwar sein, wäre aber eher die Taskmanager Begrenzung (den man ja eher deaktiviren könnte). Mit einem alternativen Taskmanager würde man dann im Nu es beenden können.
 
Hi,

Auf das mit den Prozessen kommt ja fast das gleiche raus, ABER NT-Dienste Arbeiten auch bei Ab und Wiederanmeldung des Users weiter.

Das man mit TerminateProcess auch Dienste killen kann ohnen das die Events aufgerufen werden ist mir ehrlichgesagt neu, wenn man aber wirklich Paranoid ist kann man 20 mal den gleichen Dienst mit anderem Namen laufen lassen und alle so Programmieren, das sie sich selbst Reaktivieren aber wie gesagt, es gibt keinen Perfekten Schutz!

Gruß Chris
 
Zurück
Oben