Como posso provocar o travamento do Windows (congelamento)?

180

Eu preciso testar o comportamento equipamento em caso que o Windows rígidos trava / congela (por exemplo, tela congelada, há LEDs piscando, nenhuma reação às entradas, incluindo Ctrl + Alt + Del , etc.). Para ter experimentos suficientes em um tempo razoavelmente curto, preciso iniciar essas interrupções programaticamente ou não.

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

Não é de surpreender que todas as pesquisas que fiz sobre esse tópico me levem a discussões sobre como eliminar essas situações, não provocá-las. Portanto, a pergunta pode parecer estranha o suficiente.

Feedback: experimentei muitas das receitas oferecidas em respostas e comentários. Primeiro de tudo, eu não estava interessado em falhas que trazem BSoD (foi por isso que descrevi um congelamento, não uma falha).

Devo confessar que o Windows 10 de 64 bits mostrou boa resistência a muitas das maneiras. Ele lida com praticamente qualquer método de carregamento de CPU (incluindo fork-bomb , loops etc.) muito bem. Os métodos que geram erros imediatos (a maioria dos métodos de travamento do NotMyFault) são tratados pelo sistema operacional com reinicialização ou desligamento (que não é o que eu busquei). Os melhores resultados foram alcançados pelos métodos de vazamento de memória do NotMyFault - congelamento real sem chance de reinicialização.

Por fim, fiquei impressionado com a quantidade de documentação da Microsoft que fala sobre congelar o Windows. Parece que eles conhecem essa parte muito melhor do que o oposto (luta congela) ;-)

hypers
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
DavidPostill
3
Há um cálculo que você pode fazer usando a calculadora, que congela o núcleo da CPU até que seja concluído. Em uma máquina quad core, você faria isso quatro vezes, obviamente. Mas não consigo me lembrar da equação matemática que a causa.
mickburkejnr
6
@mickburkejnr É fatorial de 100000. Alterne para "Scientific View" digite 100000 e pressione "n!". Isso funcionou bem em versões antigas do Windows. Atualmente, você recebe um aviso de que esse cálculo pode levar muito tempo e pode ser cancelado.
duenni
25
Basta começar a usá-lo.
precisa saber é
5
A instalação de atualizações sempre funcionou para mim.
Daniel R Hicks

Respostas:

230

Talvez isso possa ajudar: Forçar um travamento do sistema a partir do teclado

Com os teclados USB, você deve ativar a falha iniciada pelo teclado no registro. Na chave do Registro HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters, crie um valor chamado CrashOnCtrlScroll e defina-o igual ao valor REG_DWORD de 0x01.

Você deve reiniciar o sistema para que essas configurações tenham efeito.

Após a conclusão, a falha do teclado pode ser iniciada usando a seguinte seqüência de teclas de atalho: Mantenha pressionada a tecla CTRL à direita e pressione a tecla SCROLL LOCK duas vezes.

Ou você pode começar uma bomba de garfo: veja esta pergunta SO

Há também NotMyFault

O Notmyfault é uma ferramenta que você pode usar para travar, travar e causar vazamentos de memória do kernel no seu sistema Windows. É útil para aprender a identificar e diagnosticar problemas de driver de dispositivo e hardware, e você também pode usá-lo para gerar arquivos de despejo de tela azul em sistemas que se comportam mal.

Duenni
fonte
9
Tentei o ForkBomb e o NotMyFault. Um dos métodos de vazamento parece fazer o que eu quero. Outros não são úteis, pois trazem para reiniciar / desligar e não congelar. Muito obrigado.
Hypers3
6
CtrlScroll traz para você um BSOD. Se isso congela o sistema para depuração ou apenas o reinicia, depende das configurações de inicialização.
grawity
51
Aaannnddd duenni nunca é permitido perto dos meus computadores. Sempre.
corsiKa
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 retomar a máquina virtual quantas vezes quiser. Instale o sistema operacional desejado em um ambiente de VirtualBox (ou outra virtualização de desktop), exponha qualquer interface de hardware que esteja sendo usada (USB, Ethernet ou qualquer outra coisa) à VM.

Em seguida, você pode pausar e retomar a máquina virtual à vontade.

churrasco
fonte
24

Pelo menos em uma versão mais antiga do Windows (há alguns anos), o seguinte funcionou:

Eu escrevi um programa C com um loop infinito:

while(1) {}

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

Em um sistema com vários núcleos, eu precisaria fazer isso várias vezes para que um loop seja executado em cada núcleo ...

Martin Rosenau
fonte
39
Para aquecer a sua CPU menos enquanto faz isso: colocar _mm_pause()a partir #include <immintrin.h>do loop. Essa é uma instrução de hardware da CPU, não uma chamada do sistema "suspensa" de qualquer tipo; No que diz respeito ao sistema operacional, seu processo é indistinguível do SuperPI; a diferença está na quantidade de energia que a CPU consome enquanto executa o loop.
Peter Cordes
5
Não tenho certeza se isso impede que as partes do modo kernel do Windows funcionem.
CodesInChaos
2
@CodesInChaos: A maioria dos threads do kernel é executada com prioridade normal. Um deles por CPU e o kernel também está praticamente pronto.
Joshua
Outra técnica que envolve a montagem x86 ( STI+ HLT): stackoverflow.com/questions/3747847/…
meklarian
3
@ meklarian: Deveria ser CLI; HLT. Presumivelmente, você precisa fazer isso no modo privilegiado. Em princípio, ainda pode ser resgatado por MNI ou similar.
Node Eldredge #
10

O travamento mais forte do kernel (ou seja, sem rastreamento do mouse etc.) é quando o código entra em um loop infinito no modo kernel com interrupções desativadas.

É possível fazer isso com um driver de dispositivo e, melhor ainda, você pode escrever o driver para que ele inicie e pare o travamento sob seu controle (assumindo que o loop infinito esteja testando a condição que você está no controle).

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

Dylan McNamee
fonte
9

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

O significado disso é que não há como fazê-lo (de maneira confiável).

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

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

Ralf
fonte
1
Considerarei a desconexão física do equipamento se não estiver satisfeito com os resultados do software. Obrigado.
Hypers3
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, portanto, ele deve funcionar com o Windows 10.

Eu configurei o FireWire / 1394 , já que é o mais fácil, na minha opinião. Mas você também pode fazê-lo através da rede ou USB (e mais ).

Basicamente,

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

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

É o mesmo que acessar a guia de inicialização msconfige selecionar o botão 'Avançado':

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Em seguida (após reiniciar o computador de destino), execute o WinDbg no computador host usando a mesma testemunha do WinDbg do computador de destino.

Depois, basta pausar a execução do kernel sempre que você quiser do computador host. Se você testar um equipamento com alguma operação assíncrona em execução, isso deve ser tão eficaz quanto outros meios.

usuario
fonte
Maneira interessante. Precisa de um segundo PC embora. Mas tentará quando possível.
hipers
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 do dispositivo, mais especificamente uma falha no disco rígido. Um dos meus discos rígidos era o relato de falha iminente da unidade via SMART e o Windows 7 o montaria, mas trava sempre que eu tentava acessar determinados arquivos salvos nele. A interface do usuário trava (exceto o movimento do cursor do mouse) por até 5 minutos até que possa ler o arquivo ou desmontar a unidade após o tempo limite. 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, possa estender o tempo limite. Talvez isso o leve a meio caminho, mas não 100% a resposta que você está procurando.

Dotes
fonte
2

Este bug congela o Windows rapidamente devido ao esgotamento dos recursos. Fácil de reproduzir também.

Como se vê, isso é realmente um bug na maneira como a linha de comando (mais especificamente cmd.exe) analisa arquivos em lote e pode levar a um rápido ataque de negação de serviço; colocar a seguinte linha em um arquivo em lotes (sem novas linhas) consumirá grandes quantidades de memória rapidamente devido a esse bug (como exemplo):

^ nul<^

Para encurtar a história, quando um sinal de intercalação está no final do arquivo, o final real do arquivo é 'ignorado' e o identificador de arquivo é 'redefinido' para 0 (essencialmente) para que o lote seja analisado novamente (ad infinitum).

beatcracker
fonte
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 no 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, seu PC ainda reagirá no botão Liga / Desliga, se você esperar o suficiente.

Ele funciona usando um loop sem fim e definindo a prioridade mais alta para o processo ( 0x100"tempo real") e definindo a prioridade mais alta para os segmentos ( 15"tempo crítico"). Ele iniciará oito deles, o que é suficiente para os computadores i7. Se você precisar de mais, adapte o loop. Mais deles potencialmente retardarão as coisas mais.

#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
fonte
Tenha em atenção que este programa tem indefinido comportamento em C ++, então sob certas configurações de otimização do compilador poderia substituir a coisa toda comExitProcess(0)
Ben Voigt
@BenVoigt Nesse caso (ou seja, com g++) se -O0não bastasse, talvez gcc -Q -O0 --help=optimizers | grep enabled (e desativar a otimização sobrevivida manualmente) possa resolver o ExitProcess(0)problema?
Hastur
@BenVoigt: você poderia elaborar qual parte considera um comportamento indefinido?
Thomas Weller
@BenVoigt IMHO o compilador só pode otimizar a return 0instrução, porque ela existe após o while(true). O compilador pode descobrir que essa é uma declaração inacessível.
Thomas Weller
A linguagem C ++ exige que cada thread eventualmente avance, definido em termos de vários tipos de comportamento observável. Como o loop infinito nunca faz progresso observável, o compilador pode deduzir que não é atingido e remover não apenas ele, mas todo o código acima dele de volta ao ramo mais próximo.
Ben Voigt
0

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

beppe9000
fonte
Eu acho que você quer dizer "Você já tentou", não "Você tentou". :)
fabspro
@fabspro Eu acho que "Você tentou" está correto porque o OP já aceitou outra resposta, então o evento ao qual estou me referindo ("resolver o problema") está no passado, mas é possível dizer que a Internet está sempre acontecendo. De qualquer forma, se você sugerir uma edição, terei prazer em delegar a tarefa de aceitá-la na fila de revisão. Fonte: englishforums.com/Portuguese/HaveYouTriedOrDidYouTry/zclxb/…
beppe9000 12/17/17
Eu acho que se ele tivesse resolvido o problema, sua pergunta poderia ter sido um comentário sobre a resposta dele na época - algo como "quando você estava pesquisando seu problema, foi uma das coisas que você tentou _______?" talvez ... as coisas simplesmente sugerindo :)
fabspro
... touché :)
beppe9000 14/11
huehuehuehuehue
fabspro 14/11/2017
-2

Se você realmente deseja travar o seu PC, fazendo com que ele congele totalmente , basta usar toda a sua RAM e forçá-lo a paginar a memória. Isso vai além do simples congelamento e realmente sobrecarrega a coisa de tal maneira que você não pode nem usar o Gerenciador de Tarefas, nem mesmo pelo teclado. Mesmo quando o processo é finalizado, a recuperação do PC leva muito tempo. (Este é o melhor!)

Você pode, 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 alguns duplos ou vetores à classe também, para consumir memória mais rapidamente. Então você pode ter um timer que sai do loop while e desconstrói tudo; é claro, você terá que esperar um pouco para recuperar.

Andrew
fonte
-4

Eu sugeriria simplesmente criar um arquivo em lotes 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

Essa é provavelmente a maneira mais fácil e segura de fazer isso. Você pode substituir os nomes de processos por qualquer aplicativo do Windows.

Viscoso
fonte
3
Isso provavelmente esgotará a RAM e fará com que o disco rígido seja debulhado. Dependendo das especificações do seu computador, é possível que o computador continue a trabalhar com isso, principalmente porque quatro desses programas listados são bastante leves ( iexplore.exee talvez explorer.exetenham um impacto maior). Isso acabará com os processos de sobrecarga de memória automaticamente.
MoonRunestar
-10
  1. Vá para C: \ Windows \ Temp \
  2. Pressione Ctrl-a para Selecionar tudo
  3. Pressione Enter
asrhargar
fonte
8
Você precisaria de muitos milhares de itens para que isso fosse vagamente eficaz! Minha pasta% TEMP% está vazia ...
AlainD 3/17
6
Embora isso pareça uma tentativa legítima de responder à pergunta, não está totalmente claro como isso deve resultar exatamente no bloqueio do Windows, conforme solicitado pelo OP. Por favor edite sua pergunta para explicar por que isso vai fazer o que o OP quer.
Twisty Imitador de
9
Sentiria pena de quem tentou isso e não percebeu que foi atingido por downloads drive-by com software malicioso.
11386