Wie kann ich provozieren, dass Windows hängt (einfriert)?


180

Ich brauche Ausrüstung Verhalten im Fall zu testen , dass die Windows - Fest hängt / gefriert (zB gefrorener Bildschirm, keine LEDs blinken, keine Reaktion auf Eingaben, einschließlich Strg + Alt + Entf , etc.). Um in einigermaßen kurzer Zeit genügend Experimente durchführen zu können, muss ich diese Hänge entweder programmgesteuert oder auf andere Weise initiieren.

Ich interessiere mich insbesondere für Windows 10, aber jede Arbeitsweise für andere Versionen ist erwünscht.

Jede Suche, die ich zu diesem Thema durchgeführt habe, bringt mich nicht überraschend zu Diskussionen darüber, wie man diese Situationen beseitigt , nicht provoziert. Die Frage mag also seltsam genug erscheinen.

Feedback: Ich habe viele der Rezepte ausprobiert, die in Antworten und Kommentaren angeboten werden. Zunächst war ich nicht an Abstürzen interessiert, die BSoD bringen (deshalb habe ich ein Einfrieren beschrieben, nicht einen Absturz).

Ich muss gestehen, dass Windows 10 64-Bit auf vielen Wegen gute Beständigkeit zeigte. Es kommt mit fast jeder CPU-Lastmethode (einschließlich Fork-Bomb , Loops usw.) recht gut zurecht. Methoden, die sofortige Fehler auslösen (die meisten NotMyFault-Hänge-Methoden), werden vom Betriebssystem beim Neustart oder Herunterfahren behandelt (was nicht das ist, was ich verfolgt habe). Die besten Ergebnisse wurden mit den Speicherverlustmethoden von NotMyFault erzielt - echtes Einfrieren ohne die Möglichkeit eines Neustarts.

Schließlich war ich beeindruckt von der Menge an Dokumentation von Microsoft, in der es darum geht, Windows zum Einfrieren zu bringen. Sieht so aus, als ob sie diesen Teil viel besser kennen als das Gegenteil (Kampf friert ein) ;-)


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
DavidPostill

3
Es gibt eine Berechnung, die Sie mit dem Taschenrechner durchführen können, bei der der Kern auf der CPU eingefroren wird, bis er fertig ist. Auf einem Quad-Core-Rechner würden Sie das offensichtlich viermal machen. Aber ich kann mich für mein ganzes Leben nicht an die mathematische Gleichung erinnern, die sie verursacht.
Mickburkejnr

6
@mickburkejnr Es ist Fakultät von 100000. Wechseln Sie zu "Scientific View" Typ 100000 und drücken Sie "n!". Dies funktionierte gut auf alten Windows-Versionen. Heutzutage erhalten Sie eine Warnung, dass diese Berechnung lange dauern kann und Sie können sie abbrechen.
Duenni

25
Beginnen Sie einfach damit.
Samazi

5
Das Installieren von Upgrades hat bei mir immer funktioniert.
Daniel R Hicks

Antworten:


230

Vielleicht kann dies helfen: Erzwingen eines Systemabsturzes über die Tastatur

Bei USB-Tastaturen müssen Sie den durch die Tastatur ausgelösten Absturz in der Registrierung aktivieren. Erstellen Sie im Registrierungsschlüssel HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters einen Wert mit dem Namen CrashOnCtrlScroll und setzen Sie ihn auf den Wert REG_DWORD von 0x01.

Sie müssen das System neu starten, damit diese Einstellungen wirksam werden.

Nachdem dies abgeschlossen ist, kann der Tastaturabsturz mithilfe der folgenden Tastenkombination ausgelöst werden: Halten Sie die STRG-Taste ganz rechts gedrückt, und drücken Sie die SCROLL LOCK-Taste zweimal.

Oder Sie könnten eine Gabelbombe starten: Sehen Sie sich diese SO-Frage an

Es gibt auch NotMyFault

Notmyfault ist ein Tool, mit dem Sie auf Ihrem Windows-System abstürzen, hängen bleiben und Kernel-Speicherverluste verursachen können. Es ist nützlich, um zu lernen, wie Gerätetreiber- und Hardwareprobleme identifiziert und diagnostiziert werden. Sie können es auch verwenden, um Bluescreen-Dump-Dateien auf Systemen zu generieren, die sich nicht richtig verhalten.


9
Versuchte ForkBomb und NotMyFault. Eine der Leckagemethoden scheint zu tun, was ich will. Andere sind nicht sinnvoll, da sie zum Neustart / Herunterfahren nicht einfrieren. Danke vielmals.
Hypers

6
CtrlScroll bringt Ihnen einen BSOD. Ob dies das System zum Debuggen einfriert oder nur neu startet, hängt von den Starteinstellungen ab.
Grawity

51
Aaannnddd duenni darf sich niemals in der Nähe meiner Computer aufhalten. Je.
corsiKa

25

Es hört sich so an, als würden Sie die Reaktion eines externen Geräts auf ein Betriebssystem testen, das nicht mehr reagiert.

Wenn Ihre Hardware mit einer virtualisierten Windows-Installation verbunden werden kann, können Sie die virtuelle Maschine so oft anhalten und fortsetzen, wie Sie möchten. Installieren Sie das gewünschte Betriebssystem in einer VirtualBox-Umgebung (oder einer anderen Desktop-Virtualisierungsumgebung) und legen Sie die Hardware-Schnittstelle (USB, Ethernet oder was auch immer) für die VM offen.

Anschließend können Sie die virtuelle Maschine anhalten und nach Belieben fortsetzen.


24

Zumindest unter einer älteren Windows-Version (vor einigen Jahren) funktionierte Folgendes:

Ich habe ein C-Programm mit einer Endlosschleife geschrieben:

while(1) {}

... dann habe ich dem Programm im Task-Manager "Echtzeitpriorität" gegeben (es gibt auch eine API, die das kann).

Auf einem Multi-Core-System müsste ich das mehrmals machen, damit auf jedem Core eine Schleife läuft ...


39
Um Ihre CPU dabei weniger zu erwärmen: setzen Sie _mm_pause()ab #include <immintrin.h>in die Schleife. Dies ist ein CPU-Hardwarebefehl, kein "Sleep" -Systemaufruf. Für das Betriebssystem ist Ihr Prozess nicht von SuperPI zu unterscheiden. Der Unterschied besteht lediglich darin, wie viel Strom die CPU verbraucht, während sie die Schleife durchläuft.
Peter Cordes

5
Ich bin mir nicht sicher, ob dies die Kernel-Modus-Teile von Windows am Funktionieren hindert.
CodesInChaos

2
@CodesInChaos: Die meisten Kernel-Threads werden mit normaler Priorität ausgeführt. Eine davon pro CPU und Kernel ist auch so ziemlich erledigt.
Joshua

Eine andere Technik mit x86-Assembly ( STI+ HLT): stackoverflow.com/questions/3747847/…
meklarian

3
@meklarian: Sollte sein CLI; HLT. Vermutlich müssen Sie dies jedoch im privilegierten Modus tun. Im Prinzip kann es immer noch von NMI oder ähnlichem gerettet werden.
Nate Eldredge

10

Das stärkste Hängen des Kernels (dh keine Mausverfolgung usw.) ist, wenn der Code im Kernel-Modus mit deaktivierten Interrupts in eine Endlosschleife übergeht.

Es ist möglich, dies mit einem Gerätetreiber zu erreichen, und noch besser, Sie können den Treiber so schreiben, dass er den Hang unter Ihrer Kontrolle startet und stoppt (vorausgesetzt, die Endlosschleife testet den Zustand, unter dem Sie die Kontrolle haben).

Wie man diesen Treiber schreibt und installiert, ist das Thema einer oder mehrerer Fragen, aber das ist der Ansatz, den ich verfolgen würde.


9

Bitte überprüfen Sie die folgende Frage zu StackOverflow, die Ihrer ähnlich ist: So bringen Sie Windows für kurze Zeit zum Einfrieren

Das Wichtigste ist, dass es keine Möglichkeit gibt, dies (zuverlässig) zu tun.

Anstatt Windows einzufrieren oder zum Stillstand zu bringen, können Sie möglicherweise einfach die Kommunikation mit Ihrem Gerät unterbrechen.

Ich habe keine Ahnung, was Ihre Ausrüstung ist und wie Sie sie anschließen. Wenn es sich beispielsweise um einen USB- oder Ethernet-Adapter handelt, können Sie ihn einfach im Geräte-Manager deaktivieren oder den Stecker ziehen. Wenn Sie das System gewaltsam zum Absturz bringen oder hängen lassen, können Sie es auf verschiedene Weise beschädigen. Gehen Sie also vorsichtig vor.


1
Ich werde eine physische Trennung des Geräts in Betracht ziehen, wenn ich mit den Software-Ergebnissen nicht zufrieden bin. Vielen Dank.
Hypers

5

Ist der Kernel-Debug-Modus keine Option?

Ich habe es in Windows 7 eingerichtet und die verknüpften Anweisungen in dieser Antwort geben XP oder höher an, sodass es mit Windows 10 funktionieren sollte.

Ich habe es über FireWire / 1394 eingerichtet , da es meiner Meinung nach am einfachsten ist. Sie können dies aber auch über das Netzwerk oder USB (und mehr ) tun .

Grundsätzlich gilt,

Richten Sie den Zielcomputer ein, indem Sie die folgenden Befehle an einer Eingabeaufforderung mit erhöhten Rechten ausführen (Auswahl eines Kanals n):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Das ist das Gleiche, als würden Sie zur Startregisterkarte von gehen msconfigund die Schaltfläche 'Erweitert' auswählen:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Führen Sie dann (nach dem Neustart des Zielcomputers) WinDbg auf dem Hostcomputer mit der gleichen Bit-Zahl wie WinDbg auf dem Zielcomputer aus.

Dann müssen Sie die Kernel-Ausführung nur anhalten, wann immer Sie möchten, und zwar vom Host-Computer aus. Wenn Ihr Testgerät über einen asynchronen Betrieb verfügt, der ausgeführt wird, sollte dies genauso effektiv sein wie andere Mittel.


Interessanter Weg. Benötigt aber einen zweiten PC. Werde es aber versuchen wenn möglich.
Hypers

2

Ich weiß nicht, ob dies als Total Freeze gilt, da der Mauszeiger immer noch auf dem Bildschirm bewegt wird. Die Windows 7-Benutzeroberfläche reagiert jedoch nicht mehr, wenn Geräte-E / A-Fehler auftreten, insbesondere ein Festplattenfehler. Eine meiner Festplatten meldete einen bevorstehenden Laufwerksfehler über SMART, und Windows 7 meldete diesen Fehler, blieb jedoch hängen, wenn ich versuchte, auf bestimmte darauf gespeicherte Dateien zuzugreifen. Die Benutzeroberfläche blieb (mit Ausnahme der Mauszeigerbewegung) bis zu 5 Minuten lang gesperrt, bis die Datei gelesen oder das Laufwerk nach dem Timeout abgemeldet werden konnte. Ich weiß nicht, ob Windows die Systemuhr für die Zeitüberschreitung verwendet, aber wenn Sie die Zeit irgendwie einfrieren, können Sie die Zeitüberschreitungsdauer verlängern. Vielleicht kommst du auf halbem Weg dorthin, aber nicht zu 100% die Antwort, die du suchst.


2

Dieser Fehler friert Windows ziemlich schnell ein, da die Ressourcen erschöpft sind. Auch leicht zu reproduzieren.

Wie sich herausstellt, ist dies tatsächlich ein Fehler in der Art und Weise, wie die Befehlszeile (genauer gesagt cmd.exe) Batchdateien analysiert, und kann zu einem schnellen Denial-of-Service-Angriff führen. Das Einfügen der folgenden Zeile in eine Batchdatei (ohne neue Zeilen) beansprucht aufgrund dieses Fehlers (als Beispiel) sehr schnell sehr viel Speicher:

^ nul<^

Um es kurz zu machen: Wenn sich ein Caret am Ende der Datei befindet, wird das tatsächliche Dateiende "ignoriert" und das Dateihandle auf "0" (im Wesentlichen) zurückgesetzt, sodass der Stapel erneut analysiert wird (ad infinitum).


2

Hier ist der Quellcode einer Anwendung, die ich in meinen Debugging-Lektionen verwende. Es zeigt, wie eine Anwendung im Benutzermodus eine Art DoS-Angriff ausführen kann.

Sie werden feststellen, dass sich Ihr Mauszeiger sehr selten bewegt (einmal alle elf Sekunden auf meinem Computer). Möglicherweise reagiert Ihr PC immer noch auf den Netzschalter, wenn Sie lange genug warten.

Es funktioniert mit einer Endlosschleife und setzt die höchste Priorität für den Prozess ( 0x100"Echtzeit") und die höchste Priorität für die Threads ( 15"zeitkritisch"). Es werden 8 davon gestartet, was für i7-Computer ausreicht. Wenn Sie mehr brauchen, passen Sie die Schleife an. Mehr von ihnen verlangsamen möglicherweise die Dinge mehr.

#include "stdafx.h"
#include <windows.h>
#include <string>
#include <sstream>
#include <iostream>

void WasteTime()
{
    int priority = 15;
    ::SetThreadPriority(::GetCurrentThread(), priority);
    while (true)
    {
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    ::SetPriorityClass(::GetCurrentProcess(), 0x100);
    for(int i=0; i<7; i++)
    {
        LPDWORD threadid = 0;
        ::CreateThread(NULL, 64*1024, (LPTHREAD_START_ROUTINE)&WasteTime, NULL, 0, threadid);
        ::Sleep(2000);
    }

    WasteTime();

    return 0;
}

Beachten Sie, dass dieses Programm in C ++ undefiniertes Verhalten aufweist, sodass der Compiler unter bestimmten Optimierungseinstellungen das Ganze ExitProcess(0)
Ben Voigt

@BenVoigt In diesem Fall (dh mit g++), wenn -O0nicht genug wäre, vielleicht gcc -Q -O0 --help=optimizers | grep enabled (und Deaktivieren der überlebten Optimierung von Hand) kann das ExitProcess(0)Problem gelöst werden ?
Hastur

@BenVoigt: Könnten Sie etwas näher erläutern, welchen Teil betrachten Sie als undefiniertes Verhalten?
Thomas Weller

@BenVoigt IMHO kann der Compiler die return 0Anweisung nur optimieren , da diese nach dem existiert while(true). Der Compiler könnte feststellen, dass dies eine nicht erreichbare Anweisung ist.
Thomas Weller

Die C ++ - Sprache verlangt, dass jeder Thread irgendwann Fortschritte macht, die anhand verschiedener Arten von beobachtbarem Verhalten definiert werden. Da die Endlosschleife niemals beobachtbare Fortschritte macht, kann der Compiler daraus schließen, dass sie nicht erreicht wird, und nicht nur sie, sondern den gesamten darüber liegenden Code zurück zum nächstgelegenen Zweig entfernen.
Ben Voigt

0

Haben Sie das CPUEater- Dienstprogramm ausprobiert, das im Lieferumfang von Process Lasso enthalten ist? Ps. Ich arbeite nicht für bitsum


Ich denke du meinst "Hast du es versucht", nicht "Hast du es versucht". :)
Fabspro

@ fabspro Ich denke, "Hast du es versucht?" ist richtig, weil das OP bereits eine andere Antwort akzeptiert hat, so dass das Ereignis, auf das ich mich beziehe ("das Problem lösen"), in der Vergangenheit liegt, aber man könnte wahrscheinlich sagen, dass das Internet immer passiert. Wenn Sie eine Änderung vorschlagen, delegiere ich die Aufgabe der Annahme gerne an die Überprüfungswarteschlange. Quelle: englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/…
beppe9000

Ich denke, wenn er das Problem gelöst hätte, wäre Ihre Anfrage möglicherweise ein Kommentar zu seiner Antwort gewesen - so etwas wie "Als Sie Ihr Problem untersucht haben, haben Sie es mit einem _______ Nutzen versucht?" Vielleicht ... nur Vorschläge :)
Fabspro

... touché :)
beppe9000

huehuehuehuehue
fabspro

-2

Wenn Sie Ihren PC wirklich aufhängen möchten, ohne dass er einfriert , verwenden Sie einfach den gesamten Arbeitsspeicher und zwingen Sie ihn in den Seitenspeicher. Das geht über das bloße Einfrieren hinaus und überlastet die Sache wirklich nur so, dass Sie den Task-Manager nicht einmal über die Tastatur verwenden können. Selbst wenn der Vorgang beendet ist, dauert es lange, bis der PC wiederhergestellt ist. (Es ist das Beste!)

Sie können beispielsweise eine Klasse mit einem Zeiger auf sich selbst erstellen und in einer while-Schleife eine neue Instanz dieser Klasse für immer erstellen und jede neue Instanz im Zeiger der vorherigen Instanz speichern. Fügen Sie der Klasse möglicherweise auch einige Doubles oder Vektoren hinzu, um den Speicher schneller zu belegen. Dann könnten Sie einen Timer haben, der die while-Schleife verlässt und alles dekonstruiert; Natürlich musst du ein bisschen warten, bis es wieder hergestellt ist.


-4

Ich würde vorschlagen, einfach eine Batch-Datei mit dem folgenden Code zu erstellen:

@echo off
:x
start cmd.exe
start explorer.exe
start calc.exe
start notepad.exe
start iexplorer.exe
start paint.exe
goto x

Dies ist wahrscheinlich der einfachste und sicherste Weg, dies zu tun. Sie können die Prozessnamen durch beliebige Windows-Anwendungen ersetzen.


3
Dies wird höchstwahrscheinlich nur den Arbeitsspeicher erschöpfen und dazu führen, dass die Festplatte kaputt geht. Abhängig von Ihren Computerspezifikationen ist es möglich, dass der Computer dies weiterhin durcharbeitet, zumal 4 der aufgelisteten Programme recht leichtgewichtig sind ( iexplore.exeund möglicherweise explorer.exeeine größere Auswirkung haben würden). Es wird nur automatisch Speicher-Hogging-Prozesse abbrechen.
MoonRunestar

-10
  1. Wechseln Sie zu C: \ Windows \ Temp \
  2. Drücken Sie Strg-a für Alles auswählen
  3. Drücke Enter

8
Sie würden viele Tausende von Gegenständen benötigen, um vage wirksam zu sein! Mein% TEMP%
-Ordner

6
Dies scheint zwar ein legitimer Versuch zu sein, die Frage zu beantworten, es ist jedoch völlig unklar, wie genau dies dazu führen soll, dass Windows auf Anforderung des OP abstürzt. Bitte bearbeiten Sie Ihre Frage, um zu erklären, warum dies das tut, was das OP will.
Twisty Imitator

9
Es würde mir leid tun, wenn jemand dies versucht hätte und nicht bemerkt hätte, dass er von Drive-by-Downloads mit bösartiger Software betroffen war.
MoonRunestar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.