Systemabstürze abfangen
-
Ich möchte gerne ein Programm schreiben, dass aktuelle Prozesse überwachen und erkennen kann, ob diese Prozesse zu einem Systemabsturz (unter MS Windows) führen. Was führt denn alles zu einem Systemabsturz und wie kann ich das erkennen???
Ich programmiere mit C++ (genauer C++ Builder). Wenn ihr Beispiele parat habt wäre natürlich super!!!
Vielen Dank,
Euer Entertainer
-
Bist du von Microsoft? Ich glaub die würden einen, der sowas weiß, direkt einstellen und fürstlich bezahlen.
-
Du erkennst das ein Process einen Absturz verursacht wenn der Bluescreen da ist. Eher wirst du das nicht schaffen.
Und dann siehst auch nur du das
-
Man kann höchstens versuchen sich in jeden Prozess einzuklinken und dann den Rückgabewert beim Beenden des Prozesses überprüfen. Allerdings ist das alles nicht trivial und ich glaube das ist unmöglich :p
-
naja schrieb:
Man kann höchstens versuchen sich in jeden Prozess einzuklinken und dann den Rückgabewert beim Beenden des Prozesses überprüfen. Allerdings ist das alles nicht trivial und ich glaube das ist unmöglich :p
...und wäre völliger Blödsinn.
Vielleicht reverse.engineerst Du mal Norton CrashGuard für Win9X-Systeme...
-
@Sgt. Nukem,
ja nur hat Norton CrashGuard teilweise mehr Abstürze verursacht als verhindertUnd wenn die es nicht gescheit hinbekommen, wird es für Entertainer bestimmt x-Mal so schwer werden.
@Entertainer, es ist aber bestimmt möglich den Status einzelner Anwendungen auszulesen -> siehe Task-Manager > Anwendungen > Status. Hier gibt es ja die Meldungen "Wird ausgeführt" und "Reagiert nicht".
-
Ähm, ein Systemabsturz heißt so, weil das System abstürzt. Ein Programmabsturz ist was ganz anderes.
-
Herrmann schrieb:
. Hier gibt es ja die Meldungen "Wird ausgeführt" und "Reagiert nicht".
Man muss nur bedenken, dass "Wird ausgeführt" eigentlich "Wartet" bedeutet. "Reagiert nicht" bedeutet "Hat furchtbar viel zu tun".
-
Ich verstehe den Ansatz nicht.
Was ist denn ein Systemabsturz - ein Bluescreen? Der ereignet sich doch nur, wenn im Ring0 irgendwas passiert, also auf Treiberebene Fehler ausgelöst werden. Wie will man diese mit einem Programm auf User-Ebene abfangen? (Ok, meines Wissens gibt's einen Hook bei Bluescreens auf Kernel-Mode-Ebene, aber dann ist's ja schon passiert).
Und wenn ein Programm abgestürzt ist, stürzt das System üblicherweise nicht ab, außer wenn das Programm sich sehr tief in Resourcen einklinken konnte.
Stürzt ein Programm aber ab, wird sein Task ja ohnehin meistens entfernt, höchstens Resourcen könnten im Zweifelsfalle allokiert bleiben (ist aber auch eher die Ausnahme).
Was ist denn Sinn und Zweck der Sache und verstehst Du überhaupt, wie ein Betriebssystem funktioniert?
-
Entertainer schrieb:
Was führt denn alles zu einem Systemabsturz
Programmierfehler, Hardwaredefekte, ...?
-
Eigentlich sollte dein System ja nicht abschmieren, wenn dein Programm abschmiert. Außer du benutzt ein Betriebssystem was eben nicht die Stabilitätsanforderungen hat, die du benötigst (=> Windows 9x).
Wenn du dein Programm gegen Abstürze absichern willst, solltest du wenn du mit C oder C++ programmierst (oder anderen gefährlicheren Sprachen), mit "sicheren" Bibliotheken arbeiten, dh. das du zB. Pointer durch eine Klasse ersetzt, die dafür sorgt, dass du keine uninitialisierten Pointer dereferenzierst oder sogar prüft ob du eine Berechtigung hast, auf den Speicher zuzugreifen. Ansonsten gibt es noch verschiedene andere Absicherungen. Irgend wo hatte ich mal einen guten Artikel zu dem Thema, ich such noch ein wenig und poste den dann hier.
Ach ja, eine virtuelle Umgebung kann auch helfen. Vorallem dann wenn du den Quellcode nicht manipulieren kannst. Du könntest zB. eine Windows Instanz in VMWare oder Bochs laufen lassen.
Wenn du das wirklich alles selber schreiben willst, kannst du dich ggf. von Valgrind inspirieren lassen, dass ist ein Programm, dass Software auf einem virtuellen System laufen lässt und Speicherlecks etc. findet. Ist aber nur für Linux/x86, kann dich aber vielleicht ein wenig inspirieren.