181 votes

Comment puis-je faire en sorte que Windows se bloque (gèle) ?

J'ai besoin de tester le comportement de l'équipement dans le cas où Windows dur se bloque/se fige (par exemple, écran figé, pas de clignotement des DEL, pas de réaction aux entrées, notamment Ctrl+Alt+Del etc.). Afin d'avoir suffisamment d'expériences dans un temps raisonnablement court, je dois initier ces suspensions de manière programmatique ou autre.

Je suis intéressé par Windows 10 en particulier, mais toute méthode de travail pour d'autres versions est appréciée.

Toutes les recherches que j'ai effectuées sur ce sujet m'ont amené, sans surprise, à des discussions sur la manière de éliminer ces situations, et non les provoquer. La question peut donc sembler assez étrange.

Retour d'information : J'ai essayé plusieurs des recettes proposés dans les réponses et les commentaires. Tout d'abord, je ne m'intéressais pas aux crashes qui entraînent des BSoD (c'est pourquoi j'ai décrit un freeze, pas un crash).

Je dois avouer que Windows 10 64-bit a montré une bonne résistance à plusieurs de ces moyens. Il fait face à presque tous les Charge du CPU (y compris bombe à fourche , boucles, etc.) assez bien. Les méthodes qui provoquent des erreurs immédiates (la plupart des méthodes de suspension de NotMyFault) sont gérées par le système d'exploitation avec un redémarrage ou un arrêt (ce qui n'est pas ce que je recherchais). Les meilleurs résultats ont été obtenus par fuite de mémoire méthodes de NotMyFault - un vrai gel sans possibilité de redémarrage.

Enfin, j'ai été impressionné par la quantité de documentation de Microsoft qui parle du gel de Windows. On dirait qu'ils connaissent bien mieux cette partie que l'inverse (combattre les gels) ;-)

5voto

Nick Points 668

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

Je l'ai configuré sous Windows 7, et les instructions liées dans cette réponse spécifient XP ou plus, donc cela devrait fonctionner avec Windows 10.

J'ai le configurer sur FireWire/1394 car c'est le plus facile, à mon avis. Mais vous pouvez aussi le faire sur le réseau ou USB (et plus ).

En gros,

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

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Ce qui revient à aller dans l'onglet de démarrage de msconfig puis sélectionnez le bouton "Avancé" :

enter image description here

enter image description here

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

Il suffit ensuite de mettre en pause l'exécution du noyau quand on le souhaite depuis l'ordinateur hôte. Si votre équipement de test a une opération asynchrone qu'il exécute, cela devrait être aussi efficace que d'autres moyens.

3voto

beatcracker Points 2522

Ce bug (lien vers la machine à remonter le temps) gèle Windows assez rapidement en raison de l'épuisement des ressources. Facile à reproduire également.

Il s'avère que c'est en fait a bug (lien vers la machine à remonter le temps) dans la manière dont la ligne de commande (plus spécifiquement cmd.exe ) analyse le lot et pourrait conduire à une attaque rapide de type déni de service ; en mettant le fichier la ligne suivante dans un fichier de traitement par lots (sans nouvelles lignes) consommera de la mémoire très rapidement à cause de ce bogue (à titre d'exemple) exemple) :

^ nul<^

Pour faire court, lorsqu'un signe d'insertion se trouve à la fin du fichier, la fin réelle du fichier est " ignorée " et le fichier est " ignoré ". la fin réelle du fichier est "ignorée" et le handle du fichier "remis" à 0 (essentiellement) afin que le lot soit analysé à nouveau (à l'infini).

2voto

Dotes Points 121

Je ne sais pas si cela peut être qualifié de 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 avez des erreurs d'E/S de périphériques, plus précisément une défaillance du disque dur. L'un de mes disques durs signalait lui-même une défaillance imminente via SMART et Windows 7 le montait mais se bloquait dès que j'essayais d'accéder à certains fichiers enregistrés dessus. L'interface utilisateur se bloquait (à l'exception du mouvement du curseur de la souris) pendant 5 minutes jusqu'à ce qu'il puisse lire le fichier ou démonter le disque après le délai d'attente. Je ne sais pas si Windows utilise l'horloge système pour le délai d'attente, mais peut-être qu'en figeant le temps d'une manière ou d'une autre, vous pouvez prolonger la durée du délai d'attente ? Peut-être que cela vous aidera à trouver une solution, mais pas à 100% la réponse que vous recherchez.

2voto

Thomas Weller Points 5255

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

Vous remarquerez que le curseur de votre souris bouge très rarement (une fois toutes les onze secondes sur ma machine). Il est possible que votre PC réagisse encore au bouton d'alimentation si vous attendez suffisamment longtemps.

Il fonctionne en utilisant une boucle sans fin et en fixant la plus haute priorité au processus ( 0x100 "realtime") et en donnant la plus haute priorité aux threads ( 15 "temps critique"). Il en démarrera 8, ce qui est suffisant pour les ordinateurs i7. Si vous avez besoin de plus, adaptez la boucle. Un plus grand nombre d'entre eux ralentira potentiellement plus 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;
}

-2voto

Andrew Points 415

Si vous vraiment veulent bloquer votre PC, et le faire tomber en panne. geler utilise simplement toute sa mémoire vive et l'oblige à consulter la mémoire. Cela va aller au-delà d'un simple gel et va vraiment surcharger le processus de telle sorte que vous ne pouvez même pas utiliser le gestionnaire de tâches, même pas au clavier. Même lorsque le processus est terminé, il faudra beaucoup de temps pour que le PC se rétablisse. (C'est le meilleur !)

Vous pourriez par exemple créer une classe avec un pointeur sur elle-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. Vous pourriez aussi ajouter des doubles ou des vecteurs à la classe, pour consommer la mémoire plus rapidement. Ensuite, vous pourriez avoir un timer qui quitte la boucle while et déconstruit tout ; bien sûr, vous devrez attendre un peu pour qu'il se rétablisse.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X