¿Cómo puedo provocar que Windows se cuelgue (congele)?

180

Necesito para probar el comportamiento equipo en el caso de que de Windows duros cuelga / se congela (por ejemplo, pantalla congelada, no hay LEDs parpadeantes, ninguna reacción a las entradas, incluyendo Ctrl + Alt + Del , etc.). Para tener suficientes experimentos en un tiempo razonablemente corto, necesito iniciar estos bloqueos ya sea mediante programación o de otra manera.

Estoy interesado en Windows 10 en particular, pero cualquier forma de trabajo para otras versiones es apreciada.

Sorprendentemente, cada búsqueda que he hecho sobre este tema me lleva a discusiones sobre cómo eliminar estas situaciones, no provocarlas. Entonces la pregunta puede parecer bastante extraña.

Comentarios: He probado muchas de las recetas ofrecidas en respuestas y comentarios. En primer lugar, no estaba interesado en los bloqueos que producen BSoD (por eso describí un congelamiento, no un bloqueo).

Debo confesar que Windows 10 de 64 bits mostró buena resistencia a muchas de las formas. Se adapta a casi cualquier método de carga de CPU (incluida la bomba de horquilla , bucles, etc.) bastante bien. El sistema operativo maneja los métodos que generan errores inmediatos (la mayoría de los métodos de bloqueo de NotMyFault) con reinicio o apagado (que no es lo que busqué). Los mejores resultados se lograron con los métodos de pérdida de memoria de NotMyFault : congelación real sin posibilidad de reinicio.

Finalmente, me impresionó la cantidad de documentación de Microsoft que habla sobre la congelación de Windows. Parece que conocen esta parte mucho mejor que lo contrario (la lucha se congela) ;-)

hypers
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
DavidPostill
3
Hay un cálculo que podría hacer usando la calculadora, que congela el núcleo de la CPU hasta que se completa. En una máquina de cuatro núcleos, obviamente lo harías cuatro veces. Pero por mi vida no puedo recordar la ecuación matemática que la causa.
mickburkejnr
66
@mickburkejnr Es factorial de 100000. Cambie a "Vista científica", escriba 100000 y presione "n!". Esto funcionó bien en versiones antiguas de Windows. Hoy en día recibirás una advertencia de que este cálculo puede llevar mucho tiempo y puedes cancelarlo.
duenni
25
Solo comienza a usarlo.
samazi
55
Instalar actualizaciones siempre funcionó para mí.
Daniel R Hicks

Respuestas:

230

Tal vez esto pueda ayudar: Forzar un bloqueo del sistema desde el teclado

Con los teclados USB, debe habilitar el bloqueo iniciado por el teclado en el registro. En la clave de registro HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters, cree un valor llamado CrashOnCtrlScroll y configúrelo igual a un valor REG_DWORD de 0x01.

Debe reiniciar el sistema para que esta configuración surta efecto.

Una vez completado esto, el bloqueo del teclado se puede iniciar utilizando la siguiente secuencia de teclas de acceso rápido: Mantenga presionada la tecla CTRL más a la derecha y presione la tecla SCROLL LOCK dos veces.

O podría comenzar una bomba tenedor: vea esta pregunta SO

También hay NotMyFault

Notmyfault es una herramienta que puede usar para bloquearse, bloquearse y causar pérdidas de memoria del núcleo en su sistema Windows. Es útil para aprender a identificar y diagnosticar problemas de hardware y controladores de dispositivos, y también puede usarlo para generar archivos de volcado de pantalla azul en sistemas que se comportan mal.

duenni
fuente
99
Intenté ForkBomb y NotMyFault. Uno de los métodos de fuga parece hacer lo que quiero. Otros no son útiles ya que hacen que reiniciar / apagar no se congelen. Muchas gracias.
bombo
66
CtrlScroll te trae un BSOD. Si eso congela el sistema para la depuración o simplemente lo reinicia, depende de la configuración de arranque.
Grawity
51
Aaannnddd duenni nunca está permitido cerca de mis computadoras. Siempre.
corsiKa
25

Parece que está probando la reacción de un dispositivo externo a un sistema operativo que deja de responder.

Si su hardware se puede conectar a una instalación virtualizada de Windows, puede pausar y reanudar la máquina virtual tantas veces como desee. Instale el sistema operativo deseado en un entorno VirtualBox (u otra virtualización de escritorio), exponga cualquier interfaz de hardware que se esté utilizando (USB, Ethernet o lo que sea) a la VM.

Luego puede pausar y reanudar la máquina virtual a voluntad.

parilla
fuente
24

Al menos en una versión anterior de Windows (hace algunos años) funcionó lo siguiente:

Escribí un programa en C con un bucle sin fin:

while(1) {}

... luego le di a ese programa "prioridad en tiempo real" en el administrador de tareas (también hay una API que puede hacer esto).

En un sistema multinúcleo, necesitaría hacer esto varias veces para que se ejecute un bucle en cada núcleo ...

Martin Rosenau
fuente
39
Para calentar la CPU menos, mientras que haciendo eso: poner _mm_pause()de #include <immintrin.h>en el bucle. Esa es una instrucción de hardware de CPU, no una llamada de sistema de "suspensión" de ningún tipo; en lo que respecta al sistema operativo, su proceso es indistinguible de SuperPI; La diferencia radica en la cantidad de energía que consume la CPU mientras se ejecuta el bucle.
Peter Cordes
55
No estoy seguro de si eso impide que funcionen las partes del modo kernel de Windows.
CodesInChaos
2
@CodesInChaos: la mayoría de los hilos del núcleo se ejecutan con prioridad normal. Uno de estos por CPU y el núcleo también está prácticamente terminado.
Joshua
Otra técnica que involucra el montaje x86 ( STI+ HLT): stackoverflow.com/questions/3747847/…
meklarian
3
@meklarian: Debería serlo CLI; HLT. Sin embargo, presumiblemente debes hacerlo desde el modo privilegiado. En principio, todavía puede ser rescatado por NMI o similar.
Nate Eldredge
10

El bloqueo más fuerte del kernel (es decir, sin seguimiento del mouse, etc.) es cuando el código entra en un bucle infinito en modo kernel con interrupciones desactivadas.

Es posible lograr esto con un controlador de dispositivo, y aún mejor, puede escribir el controlador para que se inicie y detenga el bloqueo bajo su control (suponiendo que el bucle infinito esté probando la condición que usted controla).

Cómo escribir e instalar este controlador sería el tema de otra pregunta o tres, pero ese es el enfoque que tomaría.

Dylan McNamee
fuente
9

Verifique la siguiente pregunta en StackOverflow, que es similar a la suya: Cómo hacer que Windows se congele por un corto período de tiempo

El problema es que no hay forma de hacerlo (de manera confiable).

En lugar de congelar o hacer que Windows se cuelgue, tal vez pueda interrumpir la comunicación con su equipo.

No tengo idea de cuál es su equipo y cómo lo conecta. Si es un adaptador USB o Ethernet, por ejemplo, ¿podría desactivarlo fácilmente en el Administrador de dispositivos o desconectarlo? Si se bloquea o bloquea el sistema por la fuerza, puede dañarlo de varias maneras, así que tenga cuidado con lo que hace.

Ralf
fuente
1
Consideraré la desconexión física del equipo si no estoy satisfecho con los resultados del software. Gracias.
bombo
5

¿El modo de depuración del kernel no es una opción?

Lo configuré en Windows 7, y las instrucciones vinculadas en esta respuesta especifican XP o posterior, por lo que debería funcionar con Windows 10.

Lo configuré sobre FireWire / 1394 , ya que es el más fácil, en mi opinión. Pero también puede hacerlo a través de la red o USB (y más ).

Básicamente,

Configure la computadora de destino ejecutando estos comandos en un mensaje elevado (seleccionando un canal n):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Lo cual es lo mismo que ir a la pestaña de inicio msconfigy seleccionar el botón 'Avanzado':

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Luego (después de reiniciar la computadora de destino), ejecute WinDbg en la computadora host utilizando el mismo bitness de WinDbg de la computadora de destino.

Entonces es solo una cuestión de pausar la ejecución del kernel cuando lo desee desde la computadora host. Si prueba que el equipo tiene alguna operación asíncrona que está funcionando, esto debería ser tan efectivo como otros medios.

Mella
fuente
Interesante manera. Sin embargo, necesita una segunda PC. Pero lo intentaremos cuando sea posible.
hypers
2

No sé si esto califica como una congelación total porque el cursor del mouse todavía se mueve en la pantalla, pero la interfaz de usuario de Windows 7 deja de responder si tiene errores de E / S del dispositivo, más específicamente una falla del disco duro. Uno de mis discos duros era autoinforme de una falla inminente de la unidad a través de SMART y Windows 7 lo montaba pero se bloqueaba cada vez que intentaba acceder a ciertos archivos guardados en él. La interfaz de usuario se bloqueará (excepto el movimiento del cursor del mouse) por hasta 5 minutos hasta que pueda leer el archivo o desmonte la unidad después del tiempo de espera. No sé si Windows usa el reloj del sistema para el tiempo de espera, pero tal vez si de alguna manera congelas el tiempo, ¿puedes extender el tiempo de espera? Tal vez esto lo lleve a la mitad, pero no al 100% de la respuesta que está buscando.

Dotes
fuente
2

Este error congela Windows bastante rápido debido al agotamiento de los recursos. Fácil de reproducir también.

Como resultado, esto es realmente un error en la forma en que la línea de comando (más específicamente cmd.exe) analiza los archivos por lotes y podría conducir a un rápido ataque de tipo de denegación de servicio; poner la siguiente línea en un archivo por lotes (sin líneas nuevas) consumirá cantidades masivas de memoria muy rápidamente debido a este error (como ejemplo):

^ nul<^

En pocas palabras, cuando un cursor está al final del archivo, el final real del archivo se 'ignora' y el identificador del archivo se 'restablece' a 0 (esencialmente) para que el lote se analice nuevamente (hasta el infinito).

beatcracker
fuente
2

Aquí está el código fuente de una aplicación que uso en mis lecciones de depuración. Muestra cómo una aplicación en modo de usuario puede realizar una especie de ataque DoS.

Notarás que el cursor de tu mouse se mueve muy raramente (una vez cada once segundos en mi máquina). Potencialmente, su PC aún reaccionará al botón de Encendido si espera lo suficiente.

Funciona utilizando un bucle sin fin y estableciendo la máxima prioridad para el proceso ( 0x100"tiempo real") y estableciendo la máxima prioridad para los subprocesos ( 15"tiempo crítico"). Comenzará 8 de ellos, lo cual es suficiente para las computadoras i7. Si necesita más, adapte el bucle. Más de ellos potencialmente retrasarán más las cosas.

#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;
}
Thomas Weller
fuente
Tenga en cuenta que este programa tiene un comportamiento indefinido en C ++, por lo que, bajo ciertas configuraciones de optimización, el compilador podría reemplazar todo conExitProcess(0)
Ben Voigt
@BenVoigt En ese caso (es decir, con g++) si -O0no fuera suficiente, ¿tal vez gcc -Q -O0 --help=optimizers | grep enabled (y deshabilitar la optimización sobrevivida por las manos) podría resolver el ExitProcess(0)problema?
Hastur
@BenVoigt: ¿podría explicar qué parte considera un comportamiento indefinido?
Thomas Weller
@BenVoigt En mi humilde opinión, el compilador solo puede optimizar la return 0declaración, porque existe después de while(true). El compilador podría descubrir que esta es una declaración inalcanzable.
Thomas Weller
El lenguaje C ++ exige que cada subproceso finalmente progrese, definido en términos de varios tipos de comportamiento observable. Debido a que el bucle infinito nunca hace un progreso observable, el compilador puede deducir que no se alcanza, y eliminar no solo él, sino que todo el código que está por encima vuelve a la rama más cercana.
Ben Voigt
0

¿ Probó la utilidad CPUEater que se incluye con Process Lasso? PD. No trabajo para bitsum.

beppe9000
fuente
Creo que quieres decir "¿Lo has intentado?", No "¿Lo intentaste?". :)
fabspro
@fabspro Creo que "Intentaste" es correcto porque el OP ya aceptó otra respuesta, por lo que el evento al que me refiero ("resolver el problema") está en el pasado, pero probablemente se podría decir que Internet siempre está sucediendo. De todos modos, si sugiere una edición, con mucho gusto delegaré la tarea de aceptarla en la cola de revisión. Fuente: englishforums.com/English/HaveYouTriedOrDidYou Try
beppe9000
Supongo que si hubiera resuelto el problema, su pregunta podría haber sido un comentario sobre su respuesta en ese momento, algo así como "cuando estaba investigando su problema, ¿fue una de las cosas que probó con _______ utilidad?" tal vez ... solo sugiriendo cosas :)
fabspro
... touché :)
beppe9000
huehuehuehuehue
fabspro
-2

Si realmente quiere colgar su PC, haciendo que se congele por completo, simplemente use toda su RAM y fuerce la memoria de la página. Eso irá más allá de la simple congelación y realmente solo sobrecargará la cosa de tal manera que ni siquiera pueda usar el Administrador de tareas, ni siquiera con el teclado. Incluso cuando el proceso finaliza, la PC tardará mucho tiempo en recuperarse. (¡Es el mejor!)

Por ejemplo, podría crear una clase con un puntero en sí mismo y, en un ciclo while, crear una nueva instancia de esa clase para siempre, almacenando cada nueva instancia en el puntero de la instancia anterior. Quizás también agregue algunos dobles o vectores a la clase, para consumir memoria más rápidamente. Entonces podría tener un temporizador que salga del ciclo while y deconstruya todo; por supuesto, tendrás que esperar un poco para que se recupere.

Andrés
fuente
-4

Sugeriría simplemente crear un archivo por lotes con el siguiente código:

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

Esta es probablemente la forma más fácil y segura de hacerlo. Puede reemplazar los nombres de proceso con cualquier aplicación de Windows.

Baboso
fuente
3
Lo más probable es que esto agote la RAM y haga que el disco duro se agite. Dependiendo de las especificaciones de su computadora, es posible que la computadora continúe trabajando en esto, especialmente porque 4 de los programas enumerados son bastante livianos ( iexplore.exey tal vez explorer.exetendrían un mayor impacto). Simplemente eliminará los procesos de acaparamiento de memoria automáticamente.
MoonRunestar
-10
  1. Vaya a C: \ Windows \ Temp \
  2. Presiona Ctrl-a para Seleccionar todo
  3. Presione enter
asrhargar
fuente
8
¡Necesitarías muchos miles de artículos para que esto sea vagamente efectivo! Mi carpeta% TEMP% está vacía ...
AlainD
66
Si bien esto parece ser un intento legítimo de responder a la pregunta, no está del todo claro cómo exactamente se supone que esto provocará el bloqueo de Windows según lo solicitado por el OP. Por favor, editar su pregunta a explicar por qué esto va a hacer lo que quiere el OP.
Imitador de Twisty el
99
Sentiría lástima por cualquiera que haya intentado esto y no se haya dado cuenta de que se han visto afectados por descargas automáticas con software malicioso allí.
MoonRunestar