Comment puis-je provoquer un blocage de Windows?


180

Je dois tester le comportement de l' équipement dans le cas où de Windows dur se bloque / bloque (par exemple , écran figé, aucune LED clignotantes, aucune réaction aux entrées, y compris Ctrl + Alt + Suppr , etc.). Afin d'avoir assez d'expériences dans un temps raisonnablement court, je dois initier ces suspensions soit par programme, soit autrement.

Je suis intéressé par Windows 10 en particulier, mais tout moyen de travail pour les autres versions est apprécié.

Chacune des recherches que j'ai effectuées sur ce sujet m'amène sans surprise à des discussions sur la manière d' éliminer ces situations et non de les provoquer. Donc, la question peut sembler assez étrange.

Commentaires: j'ai essayé plusieurs des recettes proposées dans les réponses et les commentaires. Tout d’abord, les collisions impliquant BSoD ne m’intéressaient pas (c’est pourquoi j’ai décrit un gel, pas un crash).

Je dois avouer que Windows 10 64 bits a bien résisté à de nombreux problèmes. Il se débrouille très bien avec presque toutes les méthodes de chargement du processeur (y compris fork-bomb , boucles, etc.). Les méthodes qui génèrent des erreurs immédiates (la plupart des méthodes de blocage de NotMyFault) sont gérées par le système d'exploitation avec redémarrage ou arrêt (ce qui n'est pas ce que j'ai poursuivi). Les meilleurs résultats ont été obtenus avec les méthodes de fuite de mémoire de NotMyFault - un véritable blocage sans possibilité de redémarrage.

Enfin, j'ai été impressionné par la quantité de documentation fournie par Microsoft sur le blocage de Windows. On dirait qu'ils connaissent cette partie beaucoup mieux que l'inverse (la lutte se fige) ;-)


Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été déplacée pour discuter .
DavidPostill

3
Vous pouvez effectuer un calcul à l’aide d’une calculatrice, qui fige le noyau de la CPU jusqu’à ce qu’il soit terminé. Sur une machine quad core, vous le feriez évidemment quatre fois. Mais je ne peux pas me souvenir de l’équation mathématique qui la provoque.
mickburkejnr

6
@mickburkejnr C'est factorial de 100000. Basculez vers "Vue scientifique" tapez 100000 et appuyez sur "n!". Cela fonctionnait bien sur les anciennes versions de Windows. De nos jours, vous recevez un avertissement vous indiquant que ce calcul peut prendre beaucoup de temps et vous pouvez l'annuler.
Duenni

25
Commencez juste à l'utiliser.
Samazi

5
L'installation de mises à niveau a toujours fonctionné pour moi.
Daniel R Hicks

Réponses:


230

Peut-être que cela peut aider: forcer un crash système à partir du clavier

Avec les claviers USB, vous devez activer le blocage provoqué par le clavier dans le registre. Dans la clé de registre HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters, créez une valeur nommée CrashOnCtrlScroll et définissez-la sur une valeur REG_DWORD égale à 0x01.

Vous devez redémarrer le système pour que ces paramètres prennent effet.

Une fois cette opération terminée, le clavier peut être bloqué à l'aide de la séquence de touches suivante: Maintenez enfoncée la touche CTRL la plus à droite et appuyez deux fois sur la touche SCROLL LOCK.

Ou vous pouvez lancer une bombe à la fourche: voir cette question SO

Il y a aussi NotMyFault

Notmyfault est un outil que vous pouvez utiliser pour planter, bloquer et causer des fuites de mémoire du noyau sur votre système Windows. C'est utile pour apprendre à identifier et à diagnostiquer les problèmes matériels des pilotes de périphériques et du matériel. Vous pouvez également l'utiliser pour générer des fichiers de vidage d'écran bleu sur des systèmes défectueux.


9
Essayé ForkBomb et NotMyFault. Une des méthodes de fuite semble faire ce que je veux. D'autres ne sont pas utiles car ils amènent à redémarrer / arrêter ne pas geler. Merci beaucoup.
hypers

6
CtrlScroll vous apporte un BSOD. Que cela bloque le système pour le débogage ou le redémarre simplement, cela dépend des paramètres de démarrage.
grawity

51
Aaannnddd duenni n'est jamais autorisé à proximité de mes ordinateurs. Déjà.
CorsiKa

25

On dirait que vous testez la réaction d’un périphérique externe face à un système d’exploitation qui ne répond plus.

Si votre matériel peut être connecté à une installation Windows virtualisée, vous pouvez suspendre et reprendre la machine virtuelle autant de fois que vous le souhaitez. Installez le système d'exploitation souhaité dans un environnement VirtualBox (ou autre virtualisation de postes de travail), exposez l'interface matérielle utilisée (USB, Ethernet ou autre) à la machine virtuelle.

Vous pouvez alors mettre en pause et reprendre la machine virtuelle à volonté.


24

Au moins sous une ancienne version de Windows (il y a quelques années), les éléments suivants fonctionnaient:

J'ai écrit un programme C avec une boucle sans fin:

while(1) {}

... puis j'ai donné ce programme "priorité en temps réel" dans le gestionnaire de tâches (il y a aussi une API qui peut le faire).

Sur un système multicœur, je devrais le faire plusieurs fois pour qu'une boucle s'exécute sur chaque cœur ...


39
Pour moins chauffer votre CPU tout en faisant cela: mettre _mm_pause()de #include <immintrin.h>la boucle. Il s’agit d’une instruction matérielle de la CPU et non d’un appel système "en veille"; en ce qui concerne le système d'exploitation, votre processus est impossible à distinguer de SuperPI; la différence réside simplement dans la quantité d'énergie consommée par le processeur lors de l'exécution de la boucle.
Peter Cordes

5
Je ne sais pas si cela empêche les parties de Windows en mode noyau de fonctionner.
CodesInChaos

2
@CodesInChaos: la plupart des threads du noyau fonctionnent en priorité normale. Un de ceux-ci par processeur et par le noyau est également très bien fait.
Josué

Une autre technique impliquant l'assemblage x86 ( STI+ HLT): stackoverflow.com/questions/3747847/…
meklarian

3
@meklarian: devrait être CLI; HLT. Vraisemblablement, vous devez le faire depuis le mode privilégié, cependant. En principe, il peut toujours être sauvé par NMI ou similaire.
Nate Eldredge

10

Le blocage le plus puissant du noyau (c'est-à-dire, aucun suivi de la souris, etc.) survient lorsque le code passe dans une boucle infinie en mode noyau avec des interruptions désactivées.

Il est possible d'y parvenir avec un pilote de périphérique et, mieux encore, d'écrire le pilote de sorte qu'il démarre et arrête le blocage sous votre contrôle (en supposant que la boucle infinie teste la condition dont vous êtes le contrôle).

Comment écrire et installer ce pilote serait le sujet d’une autre question ou trois, mais c’est l’approche que j’adopterais.


9

Vérifiez la question suivante sur StackOverflow, qui est similaire à la vôtre: Comment faire geler Windows pendant une courte période

Le problème, c’est qu’il n’ya aucun moyen de le faire (de manière fiable).

Plutôt que de geler Windows ou de le bloquer, vous pouvez peut-être simplement interrompre la communication avec votre équipement.

Je ne sais pas du tout quel est votre équipement et comment vous le connectez. Si c'est un adaptateur USB ou Ethernet, par exemple, vous pouvez facilement le désactiver dans le Gestionnaire de périphériques ou le débrancher? Si vous bloquez ou suspendez le système avec force, vous pourriez l'endommager de différentes manières. Soyez donc prudent avec ce que vous faites.


1
Je considérerai la déconnexion physique de l'équipement si les résultats du logiciel ne me satisfont pas. Merci.
hypers

5

Le mode de débogage du noyau n'est-il pas une option?

Je l'ai configuré dans Windows 7 et les instructions liées dans cette réponse spécifient XP ou une version ultérieure, de sorte que cela devrait fonctionner avec Windows 10.

Je l'ai configuré sur FireWire / 1394 , car c'est à mon avis le plus simple. Mais vous pouvez également le faire via le réseau ou la clé USB (et plus encore ).

Fondamentalement,

Configurez l'ordinateur cible en exécutant ces commandes dans une invite élevée (sélection d'un canal n):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Ce qui revient à aller sur l'onglet de démarrage msconfiget à sélectionner le bouton 'Avancé':

entrez la description de l'image ici

entrez la description de l'image ici

Ensuite (après le redémarrage de l'ordinateur cible), exécutez WinDbg sur l'ordinateur hôte en utilisant le même nombre de bits que WinDbg de l'ordinateur cible.

Ensuite, il vous suffit de suspendre l'exécution du noyau à tout moment à partir de l'ordinateur hôte. Si votre équipement de test exécute une opération asynchrone, cela devrait être aussi efficace que d'autres moyens.


Manière intéressante. Besoin d'un deuxième PC cependant. Mais va essayer quand cela est possible.
hypers

2

Je ne sais pas s'il s'agit d'un gel total, car le curseur de la souris se déplace toujours à l'écran, mais l'interface utilisateur de Windows 7 ne répond plus si vous rencontrez des erreurs d'E / S de périphérique, plus précisément une panne de disque dur. L'un de mes disques durs était l'auto-signale une panne imminente de disque via SMART et Windows 7 le montait mais se bloquait à chaque fois que j'essayais d'accéder à certains fichiers qui y étaient enregistrés. L'interface utilisateur se verrouille (à l'exception du mouvement du curseur de la souris) pendant 5 minutes au maximum, jusqu'à ce qu'elle soit capable de lire le fichier ou de démonter le lecteur après l'expiration du délai. Je ne sais pas si Windows utilise l'horloge système pour le délai d'attente, mais peut-être que si vous bloquez le temps, vous pouvez prolonger la durée du délai d'attente? Cela vous mènera peut-être à mi-chemin, mais pas à 100% à la réponse que vous cherchez.


2

Ce bogue bloque Windows assez rapidement en raison de l’épuisement des ressources. Facile à reproduire aussi.

En fait, il s’agit en fait d’ un bogue dans la manière dont la ligne de commande (plus spécifiquement cmd.exe) analyse les fichiers de traitement par lots et pourrait conduire à une attaque par type de déni de service rapide; mettre la ligne suivante dans un fichier de commandes (sans nouvelles lignes) consomme très rapidement une quantité de mémoire considérable en raison de ce bogue (à titre d'exemple):

^ nul<^

En résumé, lorsqu'un signe d'insertion se trouve à la fin du fichier, la fin réelle du fichier est "ignorée" et le descripteur de fichier "réinitialisé" à 0 (essentiellement) afin que le lot soit à nouveau analysé (à l'infini).


2

Voici le code source d'une application que j'utilise dans mes cours de débogage. Il montre comment une application en mode utilisateur peut effectuer une sorte d'attaque DoS.

Vous remarquerez que le curseur de votre souris se déplace très rarement (une fois toutes les onze secondes sur ma machine). Potentiellement, votre PC continuera à réagir au bouton d'alimentation si vous attendez assez longtemps.

Cela fonctionne en utilisant une boucle sans fin et en définissant la priorité la plus élevée pour le processus ( 0x100"temps réel") et en définissant la priorité la plus élevée pour les threads ( 15"temps critique"). Il en démarrera 8, ce qui suffit pour les ordinateurs i7. Si vous avez besoin de plus, adaptez la boucle. Plus d’entre eux pourraient potentiellement ralentir davantage les choses.

#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;
}

Attention, ce programme a un comportement indéfini en C ++. Ainsi, sous certains paramètres d'optimisation, le compilateur pourrait remplacer le toutExitProcess(0)
Ben Voigt

@BenVoigt Dans ce cas (c'est-à-dire avec g++) si cela -O0ne suffisait pas, peut-être gcc -Q -O0 --help=optimizers | grep enabled (et en désactivant l'optimisation conservée à la main) peut-être résoudre le ExitProcess(0)problème?
Hastur

@BenVoigt: pourriez-vous préciser quelle partie considérez-vous comme un comportement non défini?
Thomas Weller

@BenVoigt IMHO le compilateur ne peut qu'optimiser l' return 0instruction, car celle-ci existe après while(true). Le compilateur pourrait découvrir qu'il s'agit d'une instruction inaccessible.
Thomas Weller

Le langage C ++ exige que chaque thread réalise des progrès, définis en termes de plusieurs types de comportement observable. Étant donné que la boucle infinie ne progresse jamais de façon observable, le compilateur peut en déduire qu'elle n'est pas atteinte et supprimer non seulement celle-ci, mais tout le code situé au-dessus de celle-ci dans la branche la plus proche.
Ben Voigt

0

Avez-vous essayé l' utilitaire CPUEater fourni avec Process Lasso? Ps. Je ne travaille pas pour Bitsum.


Je pense que vous voulez dire "Avez-vous essayé", pas "Avez-vous essayé". :)
fabspro

@fabspro Je pense que "Avez-vous essayé" est-il correct parce que le PO a déjà accepté une autre réponse, donc l'événement auquel je fais référence ("résoudre le problème") est du passé, mais on pourrait probablement dire qu'Internet se produit toujours. Quoi qu'il en soit, si vous proposez une modification, je déléguerai volontiers la tâche de l'accepter à la file d'attente de révision. Source: englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/…
beppe9000 Le

Je suppose que s’il avait résolu le problème, votre demande de renseignement aurait peut-être été un commentaire sur sa réponse - quelque chose du genre «quand vous faisiez des recherches sur votre problème, l’une des choses que vous avez essayée est-elle le _______ utilité? peut-être ... juste suggérer des choses :)
fabspro

... touché :)
beppe9000 Le

huehuehuehuehue
fabspro

-2

Si vous voulez vraiment bloquer votre PC, le faisant totalement geler , utilisez tout simplement toute sa mémoire vive et forcez-le dans la mémoire de la page. Cela ira au-delà du simple gel et surchargera vraiment le système de telle sorte que vous ne pourrez même pas utiliser le Gestionnaire des tâches, pas même au clavier. Même lorsque le processus est terminé, la récupération du PC prendra beaucoup de temps. (C'est le meilleur!)

Vous pouvez par exemple créer une classe avec un pointeur sur lui-même et, dans une boucle while, créer une nouvelle instance de cette classe pour toujours, en stockant chaque nouvelle instance dans le pointeur de l'instance précédente. Ajoutez peut-être aussi des doublons ou des vecteurs à la classe, pour utiliser la mémoire plus rapidement. Ensuite, vous pouvez avoir une minuterie qui quitte la boucle while et déconstruit tout; bien sûr, vous devrez attendre un peu pour le récupérer.


-4

Je suggérerais simplement de créer un fichier de commandes avec le code suivant:

@echo off
:x
start cmd.exe
start explorer.exe
start calc.exe
start notepad.exe
start iexplorer.exe
start paint.exe
goto x

C'est probablement le moyen le plus simple et le plus sûr de le faire. Vous pouvez remplacer les noms de processus par n’importe quelle application Windows.


3
Cela va probablement épuiser la RAM et provoquer le blocage du disque dur. Selon les spécifications de votre ordinateur, il est possible que l'ordinateur continue à fonctionner, surtout que 4 des programmes répertoriés sont assez légers ( iexplore.exeet explorer.exeauraient peut -être un impact plus important). Il ne vous reste plus qu'à tuer automatiquement les processus monopolisateurs de mémoire.
MoonRunestar

-10
  1. Allez dans C: \ Windows \ Temp \
  2. Appuyez sur Ctrl-a pour Tout sélectionner
  3. Appuyez sur Entrée

8
Vous aurez besoin de plusieurs milliers d'articles pour que cela soit vaguement efficace! Mon dossier% TEMP% est vide ...
AlainD

6
Bien que cela semble être une tentative légitime de répondre à la question, il est totalement incertain de savoir exactement comment cela est supposé entraîner le blocage de Windows comme demandé par l'OP. Veuillez modifier votre question pour expliquer pourquoi cela fera ce que souhaite le PO.
Twisty Impersonator

9
Je me sentirais désolé pour tous ceux qui ont essayé cela et ne se sont pas rendu compte qu'ils avaient été victimes de téléchargements intempestifs contenant des logiciels malveillants.
MoonRunestar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.