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


Necesito probar el comportamiento del equipo en caso de que Windows difícil se cuelga / congela (por ejemplo, pantalla congelada, sin LED parpadeando, sin reacción a las entradas, incluido Ctrl + Alt + Del, etc.) Para tener suficientes experimentos en un tiempo razonablemente corto, necesito iniciar estos cuelgues ya sea programáticamente o de otra manera.

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

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

Realimentación: He intentado muchas de las recetas ofrecido en respuestas y comentarios. En primer lugar, no estaba interesado en los bloqueos que traen BSoD (es por eso que 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 Carga de CPU método (incluido tenedor-bomba, bucles, etc.) bastante bien. Los métodos que provocan errores inmediatos (la mayoría de los métodos de bloqueo de NotMyFault) son manejados por el sistema operativo con reinicio o apagado (que no es lo que persiguí). Los mejores resultados fueron logrados por pérdida de memoria métodos de No es mi culpa - 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) ;-)


180


origen


Los comentarios no son para una discusión extensa; esta conversación ha sido movido al chat. - DavidPostill♦
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 lo harías cuatro veces, obviamente. Pero no puedo recordar la ecuación matemática que lo causa. - mickburkejnr
@mickburkejnr Es factorial de 100000. Cambia a "Scientific View" tipo 100000 y presiona "n!". Esto funcionó bien en versiones antiguas de Windows. Hoy en día, recibirá una advertencia de que este cálculo puede llevar mucho tiempo y puede cancelarlo. - duenni
Solo comienza a usarlo. - samazi
Instalar actualizaciones siempre funcionó para mí. - Daniel R Hicks


Respuestas:


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

Con los teclados USB, debe activar el bloqueo iniciado por el teclado en   el registro. En la clave de registro   HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters,   crear un valor llamado CrashOnCtrlScroll, y establecerlo igual a   Valor REG_DWORD de 0x01.

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

Después de que esto se complete, el bloqueo del teclado puede iniciarse mediante el uso de   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ías comenzar una bomba de tenedor: ver esta pregunta

También hay No es mi culpa

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


230



Intentó ForkBomb y NotMyFault. Uno de los métodos de fuga parece hacer lo que quiero. Otros no son útiles ya que traen para reiniciar / apagar no congelar. Muchas gracias. - hypers
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
Aaannnddd duenni nunca está permitido cerca de mis computadoras. Nunca. - corsiKa


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

Si su hardware puede conectarse a una instalación de Windows virtualizada, 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 la interfaz de hardware que se esté utilizando (USB, Ethernet o lo que sea) a la VM.

Puedes entonces pausa y reanudar la máquina virtual a voluntad.


25





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

Escribí un programa C con un ciclo infinito:

while(1) {}

... luego di 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 ciclo en cada núcleo ...


24



Para calentar menos tu CPU mientras haces eso: pon _mm_pause() de #include <immintrin.h> en el lazo. Es una instrucción de hardware de la CPU, no una llamada al 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 ejecuta el ciclo. - Peter Cordes
No estoy seguro de si eso impide que funcionen las partes del modo Kernel de Windows. - CodesInChaos
@CodesInChaos: la mayoría de los hilos del kernel se ejecutan con prioridad normal. Uno de estos por CPU y kernel está prácticamente hecho también. - Joshua
Otra técnica que implica el ensamblaje x86 (STI + HLT) stackoverflow.com/questions/3747847/... - meklarian
@meklarian: Debería ser CLI; HLT. Presumiblemente, debes hacerlo desde el modo privilegiado. En principio, aún puede ser rescatado por NMI o similar. - Nate Eldredge


El bloqueo de kernel más fuerte (es decir, sin seguimiento de mouse, etc.) es cuando el código entra en un bucle infinito en el 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 ciclo infinito está probando la condición de la que usted tiene control).

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


10





Por favor, consulte la siguiente pregunta en StackOverflow que es similar a la suya: Cómo hacer que las ventanas se congelen durante un corto período de tiempo

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

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

No tengo idea de qué es tu equipo y cómo lo conectas. Si es un adaptador USB o Ethernet, por ejemplo, puede desactivarlo fácilmente en el Administrador de dispositivos o desconectar? Si bloqueas o cuelgas el sistema por la fuerza, podrías dañar tu sistema de varias maneras, así que ten cuidado con lo que haces.


9



Consideraré la desconexión física del equipo si no estoy satisfecho con los resultados del software. Gracias. - hypers


¿El kernel debug mode 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.

He configurarlo a través de FireWire / 1394, ya que es el más fácil, en mi opinión. Pero también puedes hazlo a través de la red o USB (y Más)

Básicamente,

Configure la computadora de destino ejecutando estos comandos en un aviso 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 arranque de msconfigy seleccionando el botón 'Avanzado':

enter image description here

enter image description here

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.

Luego, solo es cuestión de detener la ejecución del kernel siempre que lo desee desde la computadora host. Si el equipo de prueba tiene alguna operación asíncrona que se está ejecutando, esto debería ser tan efectivo como otros medios.


5



Forma interesante Necesita una segunda PC sin embargo. Pero lo intentaré cuando sea posible. - hypers


No sé si esto califica como una congelación total porque el cursor del mouse aún 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 un fallo en el disco duro. Uno de mis discos duros era autoinforme de falla de disco inminente a través de SMART y Windows 7 se montaba pero se bloquea cuando traté de acceder a ciertos archivos guardados en él. La IU se bloqueará (excepto el movimiento del cursor del mouse) durante hasta 5 minutos hasta que pueda leer el archivo o desmontar la unidad después del tiempo de espera. No sé si Windows utiliza el reloj del sistema para el tiempo de espera, pero tal vez, si de alguna manera congela el tiempo, puede extender la duración del tiempo de espera. Tal vez esto te llevará parte del camino, pero no el 100% de la respuesta que estás buscando.


2





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

Como resultado, esto es en realidad un   error   en cómo la línea de comando (más específicamente cmd.exe) analiza el lote   archivos y podría llevar a un ataque rápido de denegación de servicio; poniendo   la siguiente línea en un archivo por lotes (sin líneas nuevas) consumirá   grandes cantidades de memoria muy rápidamente debido a este error (como   ejemplo):

^ nul<^

En pocas palabras, cuando hay un símbolo de intercalación al final del archivo, el real   el final del archivo se 'ignora' y el archivo maneja 'restablecer' a 0   (esencialmente) para que el lote sea analizado nuevamente (ad infinitum).


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 usuario puede realizar una especie de ataque DoS.

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

Funciona usando un ciclo sin fin y estableciendo la más alta prioridad para el proceso (0x100 "en tiempo real") y establecer la mayor prioridad para los hilos (15 "tiempo critico"). Comenzará 8 de ellos, que es suficiente para i7 computadoras. Si necesita más, adapte el bucle. Más de ellos potencialmente ralentizará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;
}

2



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 reemplazarlo por completo. ExitProcess(0) - Ben Voigt
@BenVoigt En ese caso (es decir, con g++) Si -O0 no fueron suficientes, tal vez gcc -Q -O0 --help=optimizers | grep enabled  (y deshabilitar la optimización sobrevivida por las manos) se puede resolver el ExitProcess(0) ¿problema? - Hastur
@BenVoigt: ¿podría explicar qué parte considera como un comportamiento indefinido? - Thomas Weller
@BenVoigt En mi humilde opinión, el compilador solo puede optimizar el return 0 declaración, porque eso existe después de la while(true). El compilador podría descubrir que esta es una declaración inalcanzable. - Thomas Weller
El lenguaje C ++ exige que cada hilo eventualmente avance, 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 eliminarlo no solo, sino que todo el código que está encima lo devuelve a la rama más cercana. - Ben Voigt


¿Has probado el CPUEater utilidad que se incluye con Process Lasso? PD. No trabajo para bitsum.


0



Creo que quieres decir "lo has intentado", no "lo has intentado". :) - fabspro
@fabspro Creo que "Probé" 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 uno probablemente 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/HaveYouTriedOrDidYouTry/zclxb/... - beppe9000
Supongo que si él hubiera resuelto el problema, su consulta podría haber sido un comentario sobre su respuesta entonces, algo así como "cuando investigaste tu problema, ¿fue una de las cosas que probaste la utilidad _______?" tal vez ... simplemente sugiriendo cosas :) - fabspro
... touché :) - beppe9000
huehuehuehuehue - fabspro


Si tu De Verdad quiero colgar tu PC, causando que solo congelar, simplemente agote toda su RAM y fuerce a la memoria de la página. Eso irá más allá del simple congelamiento y realmente solo sobrecargará la cosa de tal manera que ni siquiera podrá 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 a sí mismo, y en un ciclo while, crear una nueva instancia de esa clase para siempre, almacenando cada instancia nueva en el puntero de la instancia anterior. Tal vez agregue algunos dobles o vectores a la clase también, para consumir memoria más rápidamente. Entonces podrías tener un temporizador que salga del ciclo while y deconstruya todo; por supuesto, tendrás que esperar un poco hasta que se recupere.


-2