Wie kann man ein BSOD unter Windows XP und neueren Versionen verursachen?

14

Gibt es eine Möglichkeit, ein BSOD unter Windows XP und neueren Versionen programmgesteuert auszulösen? Wie?

Übrigens nur zur Klarstellung, dies ist nicht für böswillige Zwecke. Der Client hat angefordert, dass ein Terminal in seinem LAN auf diese Weise heruntergefahren / neu gestartet werden kann. Als ich fragte, warum, sagten sie, weil es schneller als ein normaler Neustart ist ... :)

(Ich bin gespannt, welchen Teil von "programmatisch" die Leute nicht verstehen, die dies auf Super User migriert haben. Duh.)

Tamás Szelei
quelle
18
Wenn Sie einen Treiber finden, für den kein Treiber geschrieben werden muss, benachrichtigen Sie Microsoft, damit das Problem behoben werden kann.
Erik
13
Äh. Es ist aus einem bestimmten Grund schneller als ein normaler Neustart - es muss nicht unbedingt ordnungsgemäß heruntergefahren werden. Wenn Sie ein Programm haben, das sehr langsam beendet wird, ist es möglicherweise kein Problem, es zu unterbrechen. Wenn Sie E / A-Hardware gewaltsam herunterfahren oder auf etwas verzichten, das sich zu nahe an der E / A-Hardware befindet, kann dies zu beschädigten Dateisystemen usw. führen Ihr Problem etwa auch ...)
12
Ihr Klient muss institutionalisiert und seine psychischen Verhältnisse von einem medizinischen Team genauer verfolgt werden.
Darin Dimitrov
9
Krankenwagen fahren in der Regel auch schneller als mit dem eigenen Auto ins Krankenhaus. Das macht es nicht zum bevorzugten Reisemodus.
FreeAsInBeer
8
Bitten Sie Ihren Kunden, den Ein- / Ausschalter 6 Sekunden lang zu drücken. Oder ziehen Sie einfach das Netzkabel, das geht schneller.
Hans Passant

Antworten:

15

Den Tastaturtreibern kann gesagt werden, dass sie einen BSOD verursachen sollen:

HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters

oder (für ältere PS / 2-Tastaturen)

HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

Und dort setzen Sie einen REG_DWORDNamen CrashOnCtrlScrollauf 1.

Nach dem nächsten Neustart können Sie den blauen Bildschirm durch Ctrl+ ScrollLk+ erzwingen ScrollLk. Der Fehlerprüfcode lautet in diesem Fall 0xE2 (MANUELL_INITIATED_CRASH).

Wenn Sie wirklich eine programmatische Methode wünschen, müssen Sie eine Lücke in einem Treiber auf diesem Computer finden oder einen simplen Treiber schreiben und installieren, der entweder KeBugCheckoder aufruft KeBugCheckEx.

Habe Spaß ;)

Randnotiz: Es kann sehr nützlich sein, einen solchen Absturz absichtlich für Treiberautoren oder sogar im Umgang mit Malware zu verursachen. Wenn Sie Ihr System so konfiguriert haben, dass ein vollständiger Speicherauszug erstellt wird, erhalten Sie ein Image des laufenden Systems, das weiter analysiert werden kann. Betrachten Sie Fälle wie einen Deadlock, in denen ein Debugger nicht in allen Fällen helfen muss.

0xC0000022L
quelle
4
Ist das wahr? Das ist cool, wenn es ist! (Nein, ich bin nicht in der Stimmung, es auf einem meiner Computer zu testen.)
Andreas Rejbrand
3
Ja, es ist eigentlich kein Scherz. Dies ist etwas, das Treiberautoren seit einiger Zeit verwenden, obwohl ich mich nicht genau an den Registrierungsspeicherort erinnerte. Musste es in meinen Notizen nachschlagen.
0xC0000022L
Ich habe einen BSOD durch Eingabe eines Druckbildschirms oder durch zu viel Arbeitsspeicher bei der Verwendung von Ram oder interner Festplatte festgestellt. Vielleicht auch ein System ausnutzen.
Tech-IO
1

Ich weiß nicht genau, wie ich es verursachen soll, aber ich glaube an Vista und 7, es wird standardmäßig heruntergefahren, wenn ein Systemfehler auftritt und der BSOD nicht angezeigt wird.

FreeAsInBeer
quelle
Das ist in Ordnung, ich möchte dieses Verhalten.
Tamás Szelei
1
@FreeAsInBeer: Eigentlich liegt das daran, dass Ihre Systemeinstellungen einen Neustart nach dem Absturz veranlassen. Dies kann auf der Registerkarte Erweitert in den Computereigenschaften geändert werden. Außerdem handelt es sich bei den heute erstellten Absturzabbildern in der Regel standardmäßig um Mini-Dumps. Aus diesem Grund erfolgt der Neustart so schnell, dass der blaue Bildschirm (im wahrsten Sinne des Wortes) nicht angezeigt wird. Aber es ist da, glauben Sie mir;)
0xC0000022L
1
@STATUS_ACCESS_DENIED: Ich weiß, ich habe ihn nur darüber informiert, dass die Standardeinstellung für diese Variable so eingestellt ist, dass BSODs nicht angezeigt werden. Deshalb hat er diese Eigenschaft überprüft, wenn er keine wie erwartet erhalten hat.
FreeAsInBeer
@FreeAsInBeer: fair genug :)
0xC0000022L
1

Im Allgemeinen tritt ein BSOD auf, wenn innerhalb des Betriebssystems oder der Hardware ein fürchterlicher Fehler auftritt. Es ist von Natur aus ziemlich schwierig, Fehler in einem der Systeme von außerhalb zu beheben, da Betriebssystemautoren und Hardwareanbieter schlechte Softwareentwickler nicht schätzen, die ihre Produkte schlecht aussehen lassen und die Benutzererfahrung beeinträchtigen.

Das Schreiben eines Treibers ist eine der wenigen Möglichkeiten, um dem Betriebssystem und der Hardware nahe genug zu kommen und einen solchen Fehler zu verursachen. Natürlich ist die Installation eines solchen Treibers im Allgemeinen nicht ohne gezielte Kenntnisse und Administratorrechte möglich. Daher gestaltet sich die Verwendung dieses Treibers für böswillige Zwecke als ziemlich schwierig. Mit dieser Art von Zugang könnten Sie viel mehr Schaden anrichten, ohne einen BSOD oder ein solches Rundum-Sorglos-Mittel.

Sion Sheevok
quelle
1

Ein BSOD ist eine Kernel-Panik. Es bedeutet, dass ein Teil des Kernels, der Kern des Betriebssystems, etwas wirklich Schlechtes getan hat. Es hat vielleicht Speicher gekritzelt, es hat vielleicht Code ausgeführt, den es nicht haben sollte. Programmatisch müssten Sie Code im Kernel-Speicher abrufen und ihn dann bei Bedarf auslösen. Ein bisschen riskant für einen Prod-Server.

Normale Windows-Computer haben einen hohen Status in Prozessen und im Kernel. Was auch immer Sie bereinigen müssen, um den Zustand konsistent zu halten, Sie haben es nur kurzgeschlossen.

Insbesondere ist ein BSOD (normalerweise) ein Kernel- (oder Treiber-) Fehler, der Kernel befindet sich in einem schlechten Zustand, fühlt sich also so schlecht an, als könne er nicht bereinigt werden und würde lieber neu starten und den guten Zustand verlieren, den er hat, nur weil er es nicht tut weiß, was gut und was schlecht ist. Alle Puffer konnten nicht auf die Festplatte (n) geleert werden. Dann wird versucht, beim Neustart zu bereinigen, aber es hat beim Herunterfahren / bei der Panik viel Kontext verloren, so dass es eine konservative Bereinigung ist, bei der sowohl gute als auch schlechte Reste aus der Panik herausgesucht werden müssen.

Ein Teil Ihres Vorteils beim Herunterfahren ist beim Starten weg, da jetzt herausgefunden werden muss, woher es stammt, dass die Beine unter sich herausgeschnitten wurden. Es muss chkdsk ausführen und alle Festplattenblöcke bereinigen, die sich in einem Teilschreibzustand befanden. USB-Festplatten zwischenspeichern viel. Sie können die Zwischenspeicherung deaktivieren, wodurch die Wahrscheinlichkeit geringer wird, dass Daten bei einem Absturz verloren gehen. Wenn Sie die Zwischenspeicherung jedoch nicht durchführen, wird die Geschwindigkeit beeinträchtigt. Welche Dateien möchten Sie verlieren?

Kurz gesagt, das ist eine schlechte Idee. Jede Produktionsmaschine, auf der dies passiert, befindet sich möglicherweise auch nach der Bereinigung in einem instabilen Zustand. Das ist schlecht.

Ich würde sagen, nur um das Herunterfahren und den Neustart in Kauf zu nehmen. Sie verlieren jede Zeitersparnis, die Sie beim ersten Neustart des Servers für nötig halten, weil er nicht startet oder Ihre Programme nicht gestartet werden können.

Reiche Homolka
quelle
Du verfehlst den springenden Punkt. Es gibt gute Gründe, einen BSOD bei Bedarf auszulösen, wenn ein Problem mit einem von Ihnen geschriebenen Treiber behoben wird. Ich denke jedoch, dass diese Frage aufgrund ihrer Natur niemals von SO nach hier hätte migriert werden dürfen.
0xC0000022L
@STATUS_ACCESS_DENIED Ich stimme Ihrer Aussage zu, aber wenn Sie sich an die ursprüngliche Frage erinnern, hatte dies nichts mit Debuggen zu tun, sondern mit einer Verknüpfung zum Herunterfahren eines Systems. Meiner Meinung nach kein guter Grund.
Rich Homolka
0

Müssen Sie erwähnen, dass das Töten von csrss.exe-Prozess BSOD machen würde. Aber nicht auf neuestem Windows (8, 8.1).

pbies
quelle
Dies kann über eine App erfolgen. Jeder kann eine solche App in Visual Studio Express erstellen (kostenlos).
pbies
Dies ist übrigens der Code 0xC000021A ( STATUS_SYSTEM_PROCESS_TERMINATED).
0xC0000022L
0

Das Code-Snippet von https://www.mpgh.net/forum/showthread.php?t=1100477 funktioniert unter Windows 10.17134

#include <windows.h>
#pragma comment(lib, "ntdll.lib")

extern "C" NTSTATUS NTAPI RtlAdjustPrivilege(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
extern "C" NTSTATUS NTAPI NtRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void BlueScreen()
{
    BOOLEAN bl;
    ULONG Response;
    RtlAdjustPrivilege(19, TRUE, FALSE, &bl); // Enable SeShutdownPrivilege
    NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response); // Shutdown
}

Es scheint keine Spur im Ereignisprotokoll zu geben. Wird es doch sicher eine Spur im Minidump geben?

Birdwes
quelle