Frage Wie kann ich Windows dazu bringen, zu hängen (einzufrieren)?


Ich muss das Verhalten der Geräte im Fall von Windows testen hart hängt / friert (z. B. eingefrorener Bildschirm, keine LEDs blinken, keine Reaktion auf Eingaben, einschließlich Strg + Alt + Entf, etc.). Um genug Experimente in einer ziemlich kurzen Zeit zu haben, muss ich diese Hänge entweder programmatisch oder anderweitig initiieren.

Ich interessiere mich für Windows 10 insbesondere aber jeder funktionierende Weg für andere Versionen wird geschätzt.

Jede Suche, die ich zu diesem Thema gemacht habe, bringt mich nicht überraschend zu Diskussionen beseitigen diese Situationen, provozieren sie nicht. So mag die Frage seltsam genug erscheinen.

Feedback: Ich habe viele ausprobiert Rezepte angeboten in Antworten und Kommentaren. Zuallererst 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 gegen viele Wege einen guten Widerstand gezeigt hat. Es kommt mit fast allen zurecht CPU-Belastung Methode (einschließlich Gabel-Bombe, Schleifen usw.) ziemlich gut. Methoden, die sofortige Fehler auslösen (die meisten NotMyFault Hang-Methoden) werden vom Betriebssystem mit Neustart oder Herunterfahren behandelt (was ich nicht verfolgt habe). Die besten Ergebnisse wurden erzielt durch Speicherleck Methoden von Ist nicht meine Schuld - Echter Freeze ohne Neustart.

Schließlich war ich beeindruckt von der Menge an Dokumentationen von Microsoft, die davon sprachen, Windows einfrieren zu lassen. Sieht so aus, als ob sie diesen Teil viel besser kennen als das Gegenteil (Kampffrieren) ;-)


180
2017-11-02 08:03


Ursprung


Kommentare sind nicht für längere Diskussionen; Diese Konversation war zum chatten bewegt. - DavidPostill♦
Es gibt eine Berechnung, die Sie mit dem Rechner durchführen können, der den Kern auf der CPU einfriert, bis er abgeschlossen ist. Auf einer Quad-Core-Maschine würden Sie es offensichtlich vier Mal tun. Aber ich kann mich nicht für das Leben von mir an die mathematische Gleichung erinnern, die es verursacht. - mickburkejnr
@mickburkejnr Es ist ein Faktor 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
Fang einfach an, es zu benutzen. - samazi
Das Installieren von Upgrades hat immer für mich funktioniert. - Daniel R Hicks


Antworten:


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

Bei USB-Tastaturen müssen Sie den von der Tastatur initiierten Absturz aktivieren   die Registrierung. Im Registrierungsschlüssel   HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Dienste \ kbdhid \ Parameters,   Erstellen Sie einen Wert mit dem Namen CrashOnCtrlScroll, und legen Sie ihn gleich a fest   REG_DWORD-Wert von 0x01.

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

Nachdem dies abgeschlossen ist, kann der Tastaturabsturz unter Verwendung von gestartet werden   die folgende Tastenkombination: Halten Sie die Taste ganz rechts gedrückt, und   Drücken Sie die SCROLL LOCK Taste zweimal.

Oder Sie könnten eine Gabelbombe starten: Sieh dir diese Frage an

Es gibt auch Ist nicht meine Schuld

Notmyfault ist ein Tool, mit dem Sie auf Ihrem Windows-System abstürzen, hängen und Kernel-Speicherlecks verursachen können. Es ist nützlich, um zu erfahren, wie Gerätetreiber- und Hardwareprobleme erkannt und diagnostiziert werden, und Sie können damit auch Blue-Screen-Dump-Dateien auf fehlerhaften Systemen erstellen.


230
2017-11-02 08:29



Versuchte ForkBomb und NotMyFault. Eine der Leak-Methoden scheint zu tun, was ich will. Andere sind nicht sinnvoll, da sie zum Neustarten / Herunterfahren nicht einfrieren. Danke vielmals. - hypers
CtrlScroll bringt Ihnen einen BSOD. Ob das System das Debugging einfriert oder nur neu startet, hängt von den Boot-Einstellungen ab. - grawity
Aaannnddd duenni ist niemals in der Nähe meiner Computer erlaubt. Je. - corsiKa


Es klingt, 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 zeigen Sie an, welche Hardware-Schnittstelle (USB, Ethernet oder was auch immer) zur VM verwendet wird.

Sie können dann anhalten und fortsetzen die virtuelle Maschine nach Belieben.


25
2017-11-05 03:16





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

Ich habe ein C-Programm mit einer Endlosschleife geschrieben:

while(1) {}

... dann gab ich dem Programm "Realtime Priority" im Taskmanager (es gibt auch eine API, die das tun kann).

Bei einem Multi-Core-System müsste ich dies mehrmals tun, damit auf jedem Core eine Schleife läuft ...


24
2017-11-02 11:55



Um die CPU dabei weniger zu heizen: put _mm_pause() von #include <immintrin.h> in der Schleife. Das ist ein CPU-Hardware-Befehl, kein "Sleep" -System-Aufruf irgendeiner Art; Soweit es das Betriebssystem betrifft, ist Ihr Prozess nicht von SuperPI zu unterscheiden; Der Unterschied besteht nur darin, wie viel Energie die CPU verbraucht, während sie die Schleife ausführt. - Peter Cordes
Ich bin mir nicht sicher, ob das die Kernel-Modus-Teile von Windows daran hindert zu arbeiten. - CodesInChaos
@CodesInChaos: Die meisten Kernel-Threads werden mit normaler Priorität ausgeführt. Eine davon pro CPU und der Kernel ist auch ziemlich fertig. - Joshua
Eine weitere Technik, bei der x86-Assembly (STI + HLT): stackoverflow.com/questions/3747847/... - meklarian
@meklarian: Sollte sein CLI; HLT. Vermutlich müssen Sie es jedoch vom privilegierten Modus aus tun. Im Prinzip kann es immer noch von NMI oder ähnlichem gerettet werden. - Nate Eldredge


Der stärkste Kernel-Hang (d. H. Keine Mausverfolgung usw.) liegt vor, wenn der Code im Kernel-Modus mit unterbrochenen 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 das Hängen unter Ihrer Kontrolle startet und stoppt (vorausgesetzt, die Endlosschleife testet die Bedingung, die Sie kontrollieren).

Wie man diesen Treiber schreibt und installiert, wäre das Thema einer anderen Frage oder drei, aber das ist der Ansatz, den ich nehmen würde.


10
2017-11-03 19:26





Bitte überprüfen Sie die folgende Frage zu StackOverflow, die Ihrer ähnlich ist: Wie man Fenster für kurze Zeit einfrieren lässt

Der Grund dafür ist, dass es keinen Weg (zuverlässig) gibt.

Anstatt zu frieren oder Windows hängen zu lassen, können Sie die Kommunikation mit Ihrem Gerät unterbrechen.

Ich habe keine Ahnung, was deine Ausrüstung ist und wie du sie anschließt. Wenn es sich um einen USB- oder Ethernet-Adapter handelt, können Sie ihn beispielsweise einfach im Geräte-Manager deaktivieren oder die Verbindung trennen? Wenn Sie das System mit Gewalt zum Absturz bringen oder aufhängen, können Sie Ihr System auf verschiedene Arten beschädigen. Seien Sie also vorsichtig mit dem, was Sie tun.


9
2017-11-02 08:15



Ich werde die physische Trennung der Geräte in Betracht ziehen, wenn ich mit den Softwareergebnissen nicht zufrieden bin. Vielen Dank. - hypers


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, also sollte es mit Windows 10 funktionieren.

Ich habe richten Sie es über FireWire / 1394 einweil es meiner Meinung nach am einfachsten ist. Aber du kannst es auch Mach es über das Netzwerk oder USB (und Mehr).

Grundsätzlich gilt,

Richten Sie den Zielcomputer ein, indem Sie diese Befehle in einer erhöhten Eingabeaufforderung ausführen (Auswählen eines Kanals) n):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Was ist das gleiche wie zum Boot-Tab von gehen msconfigund wählen Sie die Schaltfläche "Erweitert":

enter image description here

enter image description here

Führen Sie dann (nach dem Neustart des Zielcomputers) WinDbg auf dem Hostcomputer mit der gleichen Bitanzahl von WinDbg des Zielcomputers aus.

Dann ist es nur eine Frage der Unterbrechung der Kernel-Ausführung, wann immer Sie wollen vom Host-Computer. Wenn Sie testen, ob das Gerät einen asynchronen Betrieb hat, sollte es genauso effektiv sein wie andere Mittel.


5
2017-11-08 19:47



Interessante Art und Weise. Braucht aber einen zweiten PC. Aber ich werde versuchen, wenn es möglich ist. - hypers


Ich weiß nicht, ob dies als totaler Freeze gilt, weil sich der Mauszeiger immer noch auf dem Bildschirm bewegt, aber Windows 7 UI reagiert nicht mehr, wenn Sie Geräte-E / A-Fehler, genauer gesagt einen Festplattenfehler, haben. Eine meiner Festplatten bestand darin, einen drohenden Laufwerksausfall über SMART zu melden, und Windows 7 brachte es automatisch in den Bereitzustand, aber es blieb, wenn ich versuchte, auf bestimmte Dateien zuzugreifen, die darauf gespeichert waren. Die Benutzeroberfläche würde (mit Ausnahme der Mauszeigerbewegung) für bis zu 5 Minuten gesperrt, bis sie entweder die Datei lesen oder das Laufwerk nach dem Timeout entfernen konnte. Ich weiß nicht, ob Windows die Systemuhr für das Timeout verwendet, aber vielleicht, wenn Sie die Zeit irgendwie einfrieren, können Sie die Timeout-Länge verlängern? Vielleicht bringt dich das dahin, aber nicht 100% die Antwort, die du suchst.


2
2017-11-03 13:52





Dieser Fehler friert Windows ziemlich schnell ein, weil die Ressourcen erschöpft sind. Einfach zu reproduzieren.

Wie sich herausstellt, ist dies tatsächlich ein   Fehler   in wie die Befehlszeile (genauer gesagt cmd.exe) analysiert Stapel   Dateien und könnte zu einem schnellen Denial-of-Service-Angriff führen; Putten   Die folgende Zeile in einer Batchdatei (ohne neue Zeilen) wird konsumiert   riesige Mengen an Speicher sehr schnell aufgrund dieses Fehlers (als   Beispiel):

^ nul<^

Lange Rede, kurzer Sinn, wenn ein Caret am Ende der Datei steht, der eigentliche   Das Ende der Datei wird ignoriert und die Datei wird auf 0 zurückgesetzt   (im Wesentlichen), so dass der Stapel erneut analysiert wird (ad infinitum).


2
2017-11-08 13:57





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 nur sehr selten bewegt (einmal alle elf Sekunden auf meinem Computer). Möglicherweise reagiert Ihr PC noch immer auf die Einschalttaste, wenn Sie lange genug warten.

Es arbeitet mit einer Endlosschleife und legt die höchste Priorität auf den Prozess (0x100 "realtime") und legen die höchste Priorität für die Threads fest (15 "zeitkritisch"). Es wird 8 davon starten, was genug für i7 Computer ist. Wenn Sie mehr benötigen, passen Sie die Schleife an. Mehr von ihnen wird möglicherweise die Dinge mehr verlangsamen.

#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;
}

2
2017-11-08 18:22



Beachten Sie, dass dieses Programm ein nicht definiertes Verhalten in C ++ hat, so dass der Compiler unter bestimmten Optimierungseinstellungen die gesamte Sache ersetzen kann ExitProcess(0) - Ben Voigt
@BenVoigt In diesem Fall (d. H. Mit g++) ob -O0 waren vielleicht nicht genug gcc -Q -O0 --help=optimizers | grep enabled  (und die überlebte Optimierung durch Hände deaktivieren) kann das lösen ExitProcess(0) Problem? - Hastur
@BenVoigt: Könnten Sie näher erläutern, welchen Teil betrachten Sie als undefiniertes Verhalten? - Thomas Weller
@BenVoigt IMHO kann der Compiler nur das optimieren return 0 Aussage, weil das nach dem existiert while(true). Der Compiler könnte herausfinden, dass dies eine unerreichbare Aussage ist. - Thomas Weller
Die C ++ - Sprache verlangt, dass jeder Thread schließlich Fortschritte macht, definiert in Form von verschiedenen Arten von beobachtbarem Verhalten. Da die Endlosschleife niemals beobachtbare Fortschritte macht, kann der Compiler daraus schließen, dass er nicht erreicht wurde, und nicht nur den Code, sondern auch den darüber liegenden Code zurück in die nächste Verzweigung entfernen. - Ben Voigt


Hast du das versucht? CPU Eater Nützlichkeit das ist mit Process Lasso gebündelt? Ps. Ich arbeite nicht für Bitums.


0
2017-11-12 18:41



Ich denke du meinst "Hast du es versucht", nicht "Hast du es versucht". :) - fabspro
@fabspro Ich denke, "Hast du es versucht" ist korrekt, weil das OP bereits eine andere Antwort akzeptiert hat, also ist das Ereignis, auf das ich mich beziehe ("das Problem lösen"), in der Vergangenheit, aber man könnte wahrscheinlich sagen, dass Internet immer passiert. Wie auch immer, wenn Sie eine Änderung vorschlagen, delegiere ich gerne die Aufgabe, sie in die Review-Queue aufzunehmen. Quelle: englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/... - beppe9000
Ich schätze, wenn er das Problem gelöst hätte, könnte Ihre Anfrage ein Kommentar zu seiner Antwort gewesen sein - etwas wie "als Sie Ihr Problem recherchierten, war eines der Dinge, die Sie ausprobiert haben _______ Dienstprogramm?" vielleicht ... nur Dinge vorschlagen :) - fabspro
... Touché :) - beppe9000
huehuehuehuehue - fabspro