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) ;-)
Antworten:
Vielleicht kann dies helfen: Erzwingen eines Systemabsturzes über die Tastatur
Oder Sie könnten eine Gabelbombe starten: Sehen Sie sich diese SO-Frage an
Es gibt auch NotMyFault
quelle
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.
quelle
Zumindest unter einer älteren Windows-Version (vor einigen Jahren) funktionierte Folgendes:
Ich habe ein C-Programm mit einer Endlosschleife geschrieben:
... 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 ...
quelle
_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.STI
+HLT
): stackoverflow.com/questions/3747847/…CLI; HLT
. Vermutlich müssen Sie dies jedoch im privilegierten Modus tun. Im Prinzip kann es immer noch von NMI oder ähnlichem gerettet werden.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.
quelle
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.
quelle
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
):Das ist das Gleiche, als würden Sie zur Startregisterkarte von gehen
msconfig
und die Schaltfläche 'Erweitert' auswählen: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.
quelle
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.
quelle
Dieser Fehler friert Windows ziemlich schnell ein, da die Ressourcen erschöpft sind. Auch leicht zu reproduzieren.
quelle
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.quelle
ExitProcess(0)
g++
), wenn-O0
nicht genug wäre, vielleichtgcc -Q -O0 --help=optimizers | grep enabled
(und Deaktivieren der überlebten Optimierung von Hand) kann dasExitProcess(0)
Problem gelöst werden ?return 0
Anweisung nur optimieren , da diese nach dem existiertwhile(true)
. Der Compiler könnte feststellen, dass dies eine nicht erreichbare Anweisung ist.Haben Sie das CPUEater- Dienstprogramm ausprobiert, das im Lieferumfang von Process Lasso enthalten ist? Ps. Ich arbeite nicht für bitsum
quelle
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.
quelle
Ich würde vorschlagen, einfach eine Batch-Datei mit dem folgenden Code zu erstellen:
Dies ist wahrscheinlich der einfachste und sicherste Weg, dies zu tun. Sie können die Prozessnamen durch beliebige Windows-Anwendungen ersetzen.
quelle
iexplore.exe
und möglicherweiseexplorer.exe
eine größere Auswirkung haben würden). Es wird nur automatisch Speicher-Hogging-Prozesse abbrechen.quelle