Kann ein einfaches Programm für einen BSOD verantwortlich sein?

8

Ich habe einen Kunden, der mir gesagt hat, dass mein Programm (einfaches Benutzer-Land-Programm, kein Treiber) sein System mit einem Blauen Bildschirm des Todes (BSOD) stürzt. Er sagt, dass er das nie mit anderen Programmen angegangen ist und dass er es einfach mit mir reproduzieren kann.

Der BSOD ist vom Typ CRITICAL_OBJECT_TERMINATION ( 0x000000F4 ) mit dem Objekttyp 0x3 (Prozess): Ein Prozess oder Thread, der für die Systemoperation entscheidend ist, wurde unerwartet beendet oder wurde beendet.

Kann ein einfaches Programm für einen BSOD verantwortlich sein (auch unter Vista ...) oder sollte er die Hardware- oder Betriebssysteminstallation überprüfen?

    
math 19.10.2009, 12:39
quelle

9 Antworten

5

Der einfachste Weg, um einen BSOD mit einem User-Space-Programm zu verursachen, ist (afaik) zu kill das Windows-Subsystem-Prozess (csrss.exe). Dies benötigt weder fehlerhafte Hardware noch einen Fehler im Kernel oder Treiber, es benötigt nur Administratorrechte 1 .

Was genau macht dein Code? Die Fehlermeldung ("Ein Prozess oder Thread, der für den Systembetrieb entscheidend ist, wurde unerwartet beendet oder wurde beendet.") Klingt wie einer der wesentlichen Systemprozesse, die beendet wurden. Vielleicht tötest du einen Prozess und hast unbeabsichtigt den falschen Prozess bekommen?

Wenn es irgendwie möglich ist, könnten Sie versuchen, einen Speicherabzug von diesem Kunden zu bekommen. Mit den Debugging-Tools für Windows können Sie diesen Speicherauszug weiter analysieren, wie in hier .

1 Windows hindert Sie nicht daran dies zu tun , weil "Administratoren die Kontrolle über ihren Computer behalten" . Das ist also ein Design und kein Bug. Lies Raymonds Artikel und du wirst sehen warum.

    
Dirk Vollmar 19.10.2009, 13:02
quelle
10

Nur weil Ihr Programm kein Treiber ist, heißt das nicht, dass es keinen Treiber verwendet.

In der Theorie sollte Ihr Code nicht in der Lage sein, den Computer zu BSOD zu machen. Es ist Sache des Betriebssystems, dafür zu sorgen, dass dies nicht geschieht. Per Definition bedeutet das, dass es irgendwo ein Problem gibt, entweder in Hardware oder in anderem Code als Ihrem Programm. Das schließt jedoch nicht aus, dass es auch einen Fehler in deinem Code gibt.

    
Jon Skeet 19.10.2009 12:42
quelle
4

Kurze Antwort ist ja. Lange Antwort hängt davon ab, was Sie Programm tun soll und wie es tut?

    
Alex Reitbort 19.10.2009 12:42
quelle
4

Normalerweise sollte es nicht. Wenn dies der Fall ist, muss entweder

vorhanden sein
  • Ein Fehler im Windows-Kernel (möglich, aber sehr unwahrscheinlich)
  • Ein Fehler in einem Gerätetreiber (nicht unbedingt in einem Gerät, das Ihr Programm verwendet, dies könnte ziemlich kompliziert werden)
  • Ein Fehler in der Hardware

Ich würde auf Option Nummer zwei (Gerätetreiber) wetten, aber es wäre interessant, wenn Sie uns einen detaillierteren Speicherabzug bringen könnten.

    
Tamas Czinege 19.10.2009 12:44
quelle
3

Nun, ja, kann es - aber aus vielen verschiedenen Gründen.

Deshalb testen wir auf verschiedenen Maschinen, Betriebssystemen, Hardware usw.

Haben Sie einige Anforderungen für Ihr Programm festgelegt und folgt Ihr Benutzer ihnen?

    
Makach 19.10.2009 12:43
quelle
1

Wenn du es nicht selbst duplizieren kannst, und dein Programm keinen Admin benötigt, um zu laufen, wäre ich ein bisschen verdächtig gegenüber

  • Die Stabilität der Hardware dieses Systems
  • Der Virus- / Malware-Status dieses Systems.

Wenn Sie physischen Zugriff auf die Client-Box erhalten, ist es möglicherweise sinnvoll, einen vollständigen Virenscan mit einem aktuellen Scanner auszuführen und einen vollständigen memtest darauf.

Ich hatte einmal ein System, das stabil schien, außer dass ein paar wenige Programme nicht darauf laufen würden (und manchmal die Box zum Absturz brachten). Memtest zeigte, dass mein RAM einige schlechte Bits hatte, aber sie waren in höheren Sims, so dass sie nur zugegriffen wurden, wenn ein Programm versuchte, viel RAM zu verwenden.

    
T.E.D. 19.10.2009 14:01
quelle
1

Nein, und das ist so ziemlich per definitionem. Das Schlimmste, was Sie sagen können, ist, dass eine Benutzerland-Anwendung einen Windows-Fehler oder einen Treiber-Fehler "ausgelöst" hat. Aber ein modernes Desktop-Betriebssystem ist voll verantwortlich für seine eigene Integrität; Ein BSOD ist ein Versagen dieser Integrität. Daher ist das Betriebssystem verantwortlich und nur das Betriebssystem.

(Beispiel für einen BSOD-Fehler, den Ihre Anwendung allein aufdecken könnte: ein als Treiber implementierter Virenscanner, der beim Ausführen einer Datei aus Sektor 0xFFFFFFFF abstürzt, einem Sektor, der auf dieser einen Maschine zufällig nur eine DLL Ihrer Anwendung enthält )

    
MSalters 19.10.2009 14:13
quelle
-1

Ich hatte Probleme beim Beenden meiner App, ohne alle Prozesse und BD-Verbindungen zu beenden, wenn das Programm beendet wurde (ich habe die gesamte IDE abgestürzt). Ich setze den "stop and disconnecting" Code in das "Terminate" von "Form_Closed" Event meines Hauptformulars und das Problem wurde gelöst, ich weiß es nicht, das ist deine Situation.

Ein weiteres Problem kann auftreten, wenn der Benutzer versucht, auf dieselben Ressourcen zuzugreifen, die Ihre App verwendet (Datenbanken, Hardware, Sockets usw.). Fragen Sie ihn / sie darüber, welche Apps er / sie benutzt, wenn der BSOD passiert.

Ein Virus kann nicht verworfen werden.

    
Broken_Window 19.10.2009 15:39
quelle
-1

Hier ist ein einfaches c # -Kommandozeilenprogramm, das einen BSOD

verursacht %Vor%     
Johan du Toit 04.04.2017 07:28
quelle

Tags und Links