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) ;-)
Respostas:
Talvez isso possa ajudar: Forçar um travamento do sistema a partir do teclado
Ou você pode começar uma bomba de garfo: veja esta pergunta SO
Há também NotMyFault
fonte
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.
fonte
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:
... 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 ...
fonte
_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.STI
+HLT
): stackoverflow.com/questions/3747847/…CLI; HLT
. Presumivelmente, você precisa fazer isso no modo privilegiado. Em princípio, ainda pode ser resgatado por MNI ou similar.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.
fonte
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.
fonte
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
):É o mesmo que acessar a guia de inicialização
msconfig
e selecionar o botão 'Avançado':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.
fonte
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.
fonte
Este bug congela o Windows rapidamente devido ao esgotamento dos recursos. Fácil de reproduzir também.
fonte
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.fonte
ExitProcess(0)
g++
) se-O0
não bastasse, talvezgcc -Q -O0 --help=optimizers | grep enabled
(e desativar a otimização sobrevivida manualmente) possa resolver oExitProcess(0)
problema?return 0
instrução, porque ela existe após owhile(true)
. O compilador pode descobrir que essa é uma declaração inacessível.Você tentou o utilitário CPUEater que acompanha o Process Lasso? Ps. Eu não trabalho para bitsum.
fonte
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.
fonte
Eu sugeriria simplesmente criar um arquivo em lotes com o seguinte código:
Essa é provavelmente a maneira mais fácil e segura de fazer isso. Você pode substituir os nomes de processos por qualquer aplicativo do Windows.
fonte
iexplore.exe
e talvezexplorer.exe
tenham um impacto maior). Isso acabará com os processos de sobrecarga de memória automaticamente.fonte