Question Comment puis-je provoquer le blocage de Windows?


J'ai besoin de tester le comportement de l'équipement dans le cas où Windows difficile se bloque / se fige (par exemple, écran gelé, pas de LED clignotante, pas de réaction aux entrées, y compris Ctrl + Alt + Suppr, etc.). Pour avoir assez d’expériences dans un délai assez court, je dois initier ces accrochages par programme ou autrement.

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

Chaque recherche que j'ai effectuée sur ce sujet ne m'amène pas à me demander comment éliminer ces situations, pas les provoquer. Donc, la question peut sembler assez étrange.

Retour d'information: J'ai essayé beaucoup de recettes offert dans les réponses et les commentaires. Tout d'abord, je ne m'intéressais pas aux crashs apportant BSoD (c'est pourquoi j'ai décrit un gel, pas un crash).

Je dois avouer que Windows 10 64 bits a montré une bonne résistance à beaucoup de manières. Il fait face à presque tous les Charge du processeur méthode (y compris bombe fourchue, boucles, etc.) assez bien. Les méthodes qui génèrent des erreurs immédiates (la plupart des méthodes de blocage NotMyFault) sont gérées par le système d'exploitation avec le redémarrage ou l'arrêt (ce qui n'est pas ce que j'ai poursuivi). Les meilleurs résultats ont été obtenus par fuite de mémoire Méthodes de Ce n'est pas ma faute - gel réel sans aucune chance de redémarrage.

Finalement, j'ai été impressionné par la quantité de documentation de Microsoft qui parle de faire geler Windows. On dirait qu'ils connaissent cette partie beaucoup mieux que le contraire (combats gèle) ;-)


180
2017-11-02 08:03


origine


Les commentaires ne sont pas destinés à une discussion approfondie; cette conversation a été déplacé pour discuter. - DavidPostill♦
Il y a un calcul que vous pourriez faire en utilisant la calculatrice, qui fige le noyau sur le processeur jusqu'à ce qu'il soit terminé. Sur une machine quad core, vous le feriez évidemment quatre fois. Mais je ne peux pas pour la vie de moi me souvenir de l'équation mathématique qui la cause. - mickburkejnr
@mickburkejnr C'est factoriel de 100000. Passez à "Scientific View" tapez 100000 et appuyez sur "n!". Cela a bien fonctionné sur les anciennes versions de Windows. De nos jours, vous serez averti que ce calcul peut prendre du temps et que vous pouvez l'annuler. - duenni
Commencez juste à l'utiliser. - samazi
L'installation de mises à jour a toujours fonctionné pour moi. - Daniel R Hicks


Réponses:


Peut-être que cela peut aider: Forcer un système à tomber en panne depuis le clavier

Avec les claviers USB, vous devez activer le crash initié par le clavier dans   le registre. Dans la clé de registre   HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters,   créer une valeur nommée CrashOnCtrlScroll et la définir égale à   Valeur REG_DWORD de 0x01.

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

Une fois ceci terminé, le crash du clavier peut être initié en utilisant   la séquence de touches suivante: Maintenez la touche CTRL la plus à droite et   appuyez deux fois sur la touche SCROLL LOCK.

Ou vous pourriez commencer une bombe à fourche: voir cette question SO

Il y a aussi Ce n'est pas ma faute

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


230
2017-11-02 08:29



Essayé ForkBomb et NotMyFault. L'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, pas à geler. Merci beaucoup. - hypers
CtrlScroll vous apporte un BSOD. Le fait de geler le système pour le déboguer ou simplement de le redémarrer dépend des paramètres de démarrage. - grawity
Aaannnddd duenni n'est jamais autorisé près de mes ordinateurs. Déjà. - corsiKa


On dirait que vous testez la réaction d'un périphérique externe à 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 bureau), exposez l'interface matérielle utilisée (USB, Ethernet ou autre) à la VM.

Vous pouvez alors faire une pause et reprendre la machine virtuelle à volonté.


25
2017-11-05 03:16





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

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

while(1) {}

... alors 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 multi-core, je devrais le faire plusieurs fois pour qu'une boucle fonctionne sur chaque core ...


24
2017-11-02 11:55



Pour chauffer moins votre CPU en faisant ça: _mm_pause() de #include <immintrin.h> dans la boucle. C'est une instruction matérielle du processeur, pas un appel système "en veille" d'aucune sorte; en ce qui concerne l'OS, votre processus ne se distingue pas 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
Je ne suis pas sûr si cela arrête le fonctionnement du noyau des fenêtres de Windows. - CodesInChaos
@CodesInChaos: La plupart des threads du noyau s'exécutent normalement. Un de ceux-ci par processeur et par noyau est presque terminé. - Joshua
Une autre technique impliquant l'assemblage de x86 (STI + HLT): stackoverflow.com/questions/3747847/... - meklarian
@meklarian: Devrait être CLI; HLT. Vous devez probablement le faire depuis le mode privilégié. En principe, il peut toujours être sauvé par NMI ou similaire. - Nate Eldredge


Le blocage le plus important du noyau (c’est-à-dire, pas de suivi de la souris, etc.) se produit lorsque le code entre 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 encore mieux, vous pouvez écrire le pilote pour qu'il démarre et arrête le blocage sous votre contrôle (en supposant que la boucle infinie teste la condition que vous contrôlez).

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


10
2017-11-03 19:26





S'il vous plaît vérifier la question suivante sur StackOverflow qui est similaire à la vôtre: Comment faire geler les fenêtres pour une courte période

Le fait est qu’il n’ya aucun moyen de le faire (de manière fiable).

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

Je n'ai aucune idée de ce que votre équipement est 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 tombez en panne ou accrochez le système, vous risquez d'endommager votre système de différentes manières, alors faites attention à ce que vous faites.


9
2017-11-02 08:15



Je considérerai la déconnexion physique de l'équipement si je ne suis pas satisfait des résultats du logiciel. Merci. - hypers


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 version ultérieure, il devrait donc fonctionner avec Windows 10.

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

Fondamentalement,

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

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Quelle est la même chose que d'aller à l'onglet de démarrage de msconfiget en sélectionnant le bouton "Avancé":

enter image description here

enter image description here

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

Ensuite, il suffit de suspendre l'exécution du noyau à tout moment à partir de l'ordinateur hôte. Si vous testez un équipement dont le fonctionnement asynchrone est en cours d'exécution, cela devrait être aussi efficace que d'autres moyens.


5
2017-11-08 19:47



Manière intéressante. Besoin d'un deuxième PC si. Mais essayera quand c'est possible. - hypers


Je ne sais pas si cela peut être considéré comme un gel total, car le curseur de la souris se déplace toujours à l'écran, mais Windows 7 UI ne répond plus si vous rencontrez des erreurs d'E / S de périphérique, en particulier une panne de disque dur. L'un de mes disques durs était une auto-déclaration de panne de disque imminente via SMART et Windows 7 le montait mais se bloquait à chaque fois que j'essayais d'accéder à certains fichiers enregistrés dessus. L'interface utilisateur se verrouillerait (sauf pour le déplacement du curseur de la souris) pendant 5 minutes jusqu'à ce qu'elle puisse lire le fichier ou démonter le lecteur après l'expiration du délai. Je ne sais pas si Windows utilise l'horloge du système pour le délai d'attente, mais peut-être que si vous gèlez le temps, vous pouvez prolonger la durée du délai d'attente? Peut-être que cela vous mènera à mi-chemin, mais pas à 100% de la réponse que vous recherchez.


2
2017-11-03 13:52





Ce bug gèle Windows assez rapidement en raison de l'épuisement des ressources. Facile à reproduire aussi.

Il s'avère que c'est en fait une   punaise   dans la façon dont la ligne de commande (plus spécifiquement cmd.exe) analyse le lot   fichiers et pourrait mener à une attaque rapide de type déni de service; en mettant   la ligne suivante dans un fichier de commandes (sans nouvelles lignes) consommera   des quantités massives de mémoire très rapidement en raison de ce bug (en tant que   Exemple):

^ nul<^

Longue histoire courte, quand un caret est à la fin du fichier, le réel   la fin du fichier est "ignoré" et le descripteur de fichier "reset" à 0   (essentiellement) pour que le lot soit à nouveau analysé (ad infinitum).


2
2017-11-08 13:57





Voici le code source d'une application que j'utilise dans mes leçons de débogage. Il montre comment une application en mode utilisateur peut effectuer une sorte d’attaque par déni de service.

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

Cela fonctionne en utilisant une boucle sans fin et en définissant la plus haute priorité au processus (0x100 "temps réel") et définir 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. Plus d'entre eux ralentiront potentiellement 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;
}

2
2017-11-08 18:22



Méfiez-vous que ce programme a un comportement indéfini en C ++, donc sous certains paramètres d'optimisation, le compilateur pourrait remplacer le tout par ExitProcess(0) - Ben Voigt
@BenVoigt Dans ce cas (c'est-à-dire avec g++) si -O0 ne suffisait pas, peut-être gcc -Q -O0 --help=optimizers | grep enabled  (et en désactivant l’optimisation conservée par les mains) peut être résolu le ExitProcess(0) problème? - Hastur
@ BenVoigt: pourriez-vous élaborer, quelle partie considérez-vous comme un comportement indéfini? - Thomas Weller
@BenVoigt IMHO le compilateur ne peut qu'optimiser le return 0 déclaration, car cela existe après le while(true). Le compilateur pourrait découvrir qu'il s'agit d'une instruction inaccessible. - Thomas Weller
Le langage C ++ exige que chaque thread fasse éventuellement des progrès, définis en termes de plusieurs types de comportements observables. Comme la boucle infinie ne progresse jamais de manière observable, le compilateur peut en déduire qu'il n'est pas atteint, et en supprimer non seulement, mais tout le code au-dessus de la branche la plus proche. - Ben Voigt


Avez-vous essayé le CPUEater utilitaire qui est livré avec Process Lasso? Ps. Je ne travaille pas pour bitsum.


0
2017-11-12 18:41



Je pense que vous voulez dire "Avez-vous essayé", pas "Avez-vous essayé". :) - fabspro
@fabspro Je pense que "Avez-vous essayé" est correct parce que l'OP a déjà accepté une autre réponse, donc l'événement auquel je me réfère ("résoudre le problème") est dans le passé, mais on pourrait probablement dire qu'Internet se produit toujours. Quoi qu'il en soit, si vous proposez une modification, je me ferai un plaisir de déléguer la tâche de l'accepter à la file d'attente de révision. La source: englishforums.com/French/HaveYouTriedOrDidYouTry/zclxb/... - beppe9000
Je suppose que s'il avait résolu le problème, votre enquête aurait pu être un commentaire sur sa réponse à ce moment-là - quelque chose comme "lorsque vous faisiez des recherches sur votre problème, l'une des choses que vous avez essayée était-elle utile?" peut-être ... juste suggérer des choses :) - fabspro
... touché :) - beppe9000
huehuehuehuehue - fabspro