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) ;-)
Respuestas:
Tal vez esto pueda ayudar: Forzar un bloqueo del sistema desde el teclado
O podría comenzar una bomba tenedor: vea esta pregunta SO
También hay NotMyFault
fuente
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.
fuente
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:
... 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 ...
fuente
_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.STI
+HLT
): stackoverflow.com/questions/3747847/…CLI; HLT
. Sin embargo, presumiblemente debes hacerlo desde el modo privilegiado. En principio, todavía puede ser rescatado por NMI o similar.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.
fuente
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.
fuente
¿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
):Lo cual es lo mismo que ir a la pestaña de inicio
msconfig
y seleccionar el botón 'Avanzado':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.
fuente
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.
fuente
Este error congela Windows bastante rápido debido al agotamiento de los recursos. Fácil de reproducir también.
fuente
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.fuente
ExitProcess(0)
g++
) si-O0
no fuera suficiente, ¿tal vezgcc -Q -O0 --help=optimizers | grep enabled
(y deshabilitar la optimización sobrevivida por las manos) podría resolver elExitProcess(0)
problema?return 0
declaración, porque existe después dewhile(true)
. El compilador podría descubrir que esta es una declaración inalcanzable.¿ Probó la utilidad CPUEater que se incluye con Process Lasso? PD. No trabajo para bitsum.
fuente
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.
fuente
Sugeriría simplemente crear un archivo por lotes con el siguiente código:
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.
fuente
iexplore.exe
y tal vezexplorer.exe
tendrían un mayor impacto). Simplemente eliminará los procesos de acaparamiento de memoria automáticamente.fuente