Como posso provocar o Windows a travar (congelar)?

180

Eu preciso testar o comportamento do equipamento caso o Windows rígido trava / congela (por exemplo, tela congelada, nenhum LED piscando, nenhuma reação a entradas, incluindo Ctrl + Alt + Del , etc.). Para ter experiências suficientes em um tempo razoavelmente curto, preciso iniciá-las de maneira programática ou de outra forma.

Estou interessado no Windows 10 em particular, mas qualquer forma de trabalho para outras versões é apreciada.

Todas as pesquisas que eu fiz sobre esse assunto não me surpreendem com discussões sobre como eliminar essas situações, não provocá-las. Então a pergunta pode parecer estranha o suficiente.

Feedback: Eu tentei muitas das receitas oferecidas em respostas e comentários. Primeiro de tudo, eu não estava interessado em travamentos que trazem o BSoD (é por isso que descrevi um congelamento, não um travamento).

Devo confessar que o Windows 10 de 64 bits mostrou boa resistência a muitas das maneiras. Ele lida com quase qualquer método carga da CPU (incluindo garfo-bomba , loops, etc.) muito bem. Os métodos que geram erros imediatos (a maioria dos métodos de interrupção do NotMyFault) são tratados pelo SO com reinicialização ou desligamento (que não é o que eu segui). Os melhores resultados foram obtidos pelos métodos vazamento de memória do NotMyFault - congelamento real sem chance de reinicialização.

Finalmente, fiquei impressionado com a quantidade de documentação da Microsoft que fala sobre o congelamento do Windows. Parece que eles conhecem essa parte muito melhor do que o oposto (lutando congelando); -)

    
por hypers 02.11.2017 / 09:03

13 respostas

230

Talvez isso possa ajudar: Forçando uma falha no sistema a partir do teclado

With USB keyboards, you must enable the keyboard-initiated crash in the registry. In the registry key HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters, create a value named CrashOnCtrlScroll, and set it equal to a REG_DWORD value of 0x01.

You must restart the system for these settings to take effect.

After this is completed, the keyboard crash can be initiated by using the following hotkey sequence: Hold down the rightmost CTRL key, and press the SCROLL LOCK key twice.

Ou você pode começar uma bifurcação: veja essa pergunta SO

Há também NotMyFault

Notmyfault is a tool that you can use to crash, hang, and cause kernel memory leaks on your Windows system. It’s useful for learning how to identify and diagnose device driver and hardware problems, and you can also use it to generate blue screen dump files on misbehaving systems.

    
por 02.11.2017 / 09:29
25

Parece que você está testando a reação de um dispositivo externo a um sistema operacional que não responde.

Se o seu hardware puder ser conectado a uma instalação virtualizada do Windows, você poderá pausar e reiniciar a máquina virtual quantas vezes quiser. Instale o SO desejado em um ambiente VirtualBox (ou outra virtualização de desktop), exponha a interface de hardware que estiver sendo usada (USB, Ethernet ou qualquer outra) à VM.

Você pode, então, pausar e retomar a máquina virtual à vontade.

    
por 05.11.2017 / 04:16
24

Pelo menos sob uma versão antiga do Windows (alguns anos atrás), o seguinte funcionou:

Eu escrevi um programa em C com um loop infinito:

while(1) {}

... então eu dei esse programa "prioridade em tempo real" no gerenciador de tarefas (também há uma API que pode fazer isso).

Em um sistema multi-core eu precisaria fazer isso várias vezes para que um loop esteja rodando em cada núcleo ...

    
por 02.11.2017 / 12:55
10

O kernel mais strong travado (isto é, sem rastreamento de mouse, etc.) é quando o código entra em um loop infinito no modo kernel com interrupções.

É possível conseguir isso com um driver de dispositivo e, melhor ainda, é possível gravar o driver de forma que ele inicie e interrompa o travamento sob o seu controle (supondo que o loop infinito esteja testando a condição da qual você está controlando).

Como escrever e instalar esse driver seria o tópico de outra pergunta ou três, mas essa é a abordagem que eu tomaria.

    
por 03.11.2017 / 20:26
9

Verifique a seguinte pergunta no StackOverflow, que é semelhante à sua: Como fazer com que o Windows congele por um curto período de tempo

O mais importante é que não há como (de forma confiável) fazê-lo.

Em vez de congelar ou bloquear o Windows, talvez você possa interromper a comunicação com seu equipamento.

Eu não tenho ideia do que é seu equipamento e como você o conecta. Se é um adaptador USB ou Ethernet, por exemplo, você pode facilmente desativá-lo no Gerenciador de dispositivos ou desconectar? Se você travar com força ou travar o sistema, poderá danificar seu sistema de várias maneiras, então tenha cuidado com o que faz.

    
por 02.11.2017 / 09:15
5

O modo de depuração do kernel não é uma opção?

Eu o configurei no Windows 7, e as instruções vinculadas nesta resposta especificam o XP ou posterior, por isso ele deve funcionar com o Windows 10.

Eu tenho configuração acima FireWire / 1394 , já que é o mais fácil, na minha opinião. Mas você também pode fazer isso pela rede ou USB (e mais ).

Basicamente,

Configure o computador de destino executando esses comandos em um prompt elevado (escolhendo um canal n ):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

O que é o mesmo que ir para a guia de inicialização de msconfig e selecionar o botão 'Avançado':

Em seguida (depois de reinicializar o computador de destino), execute o WinDbg no computador host usando o mesmo bitness do WinDbg do computador de destino.

Então é só uma questão de pausar a execução do kernel sempre que você quiser no computador host. Se o equipamento de teste tiver alguma operação assíncrona que esteja sendo executada, isso deve ser tão eficiente quanto outros meios.

    
por 08.11.2017 / 20:47
2

Não sei se isso se qualifica como um congelamento total porque o cursor do mouse ainda se move na tela, mas a interface do Windows 7 não responde se você tiver erros de E / S de dispositivo, mais especificamente uma falha no disco rígido. Um dos meus discos rígidos foi o auto-relato de falha iminente na unidade via SMART e o Windows 7 montaria, mas travaria sempre que eu tentasse acessar certos arquivos salvos nele. A interface do usuário trava (exceto pelo movimento do cursor do mouse) por até 5 minutos até que possa ler o arquivo ou desmontar a unidade após o tempo limite. Eu não sei se o Windows usa o relógio do sistema para o tempo limite, mas talvez se você de alguma forma congelar o tempo que você pode estender o tempo limite? Talvez isso te separe, mas não é 100% a resposta que você está procurando.

    
por 03.11.2017 / 14:52
2

Esse bug congela o Windows rapidamente devido ao recurso exaustivo. Fácil de reproduzir também.

As it turns out, this is actually a bug in how the command line (more specifically cmd.exe) parses batch files and could lead to a quick denial of service type attack; putting the following line in a batch file (with no new lines) will consume massive amounts of memory very quickly due to this bug (as an example):

^ nul<^

Long story short, when a caret is at the end of the file, the actual end of file is 'ignored' and the file handle 'reset' to 0 (essentially) so that the batch is parsed again (ad infinitum).

    
por 08.11.2017 / 14:57
2

Aqui está o código-fonte de um aplicativo que eu uso nas minhas lições de depuração. Ele mostra como um aplicativo de modo de usuário pode executar uma espécie de ataque DoS.

Você notará que o cursor do mouse se move muito raramente (uma vez a cada onze segundos na minha máquina). Potencialmente, o seu PC ainda reagirá no botão Power se você esperar o tempo suficiente.

Funciona usando um loop infinito e definindo a mais alta prioridade para o processo ( 0x100 "realtime") e definindo a maior prioridade para os threads ( 15 "time critical"). Ele irá iniciar 8 deles, o que é suficiente para computadores i7. Se você precisar de mais, adapte o loop. Mais deles potencialmente retardarão mais as coisas.

#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;
}
    
por 08.11.2017 / 19:22
0

Você tentou o utilitário CPUEater que é empacotado com o Process Lasso? Ps. Eu não trabalho para bitsum.

    
por 12.11.2017 / 19:41
-2

Se você realmente quer pendurar seu PC, fazendo com que ele apenas congele , simplesmente use toda a sua RAM e force a memória da página. Isso vai além do mero congelamento e apenas sobrecarrega a coisa de tal forma que você não pode nem usar o Gerenciador de Tarefas, nem mesmo pelo teclado. Mesmo quando o processo é finalizado, levará muito tempo para o PC se recuperar. (É o melhor!)

Você poderia, por exemplo, criar uma classe com um ponteiro para si mesmo e, em um loop while, criar uma nova instância dessa classe para sempre, armazenando cada nova instância no ponteiro da instância anterior. Talvez adicione algumas duplas ou vetores à classe também, para consumir memória mais rapidamente. Então você poderia ter um temporizador que saia do loop while e desconstrua tudo; claro, você terá que esperar um pouco para se recuperar.

    
por 09.11.2017 / 21:46
-4

Sugiro simplesmente criar um arquivo em lote com o seguinte 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 é provavelmente a maneira mais fácil e segura de fazer isso. Você pode substituir os nomes dos processos por quaisquer aplicativos do Windows.

    
por 03.11.2017 / 23:50
-10
  1. Ir para C: \ Windows \ Temp \
  2. Pressione Ctrl-a para selecionar todos
  3. Pressione Enter
por 03.11.2017 / 15:44