Windowsをハング(フリーズ)させるにはどうすればよいですか?


180

Windowsがハードハング/フリーズした場合の機器の動作をテストする必要があります(画面のフリーズ、LEDの点滅なし、Ctrl + Alt + Delなどの入力への反応なしなど)。かなり短い時間で十分な実験を行うために、これらのハングをプログラムまたはその他の方法で開始する必要があります。

特にWindows 10に興味がありますが、他のバージョンの作業方法はありがたいです。

このトピックで行ったすべての検索は、驚くことではなく、これらの状況を誘発するのではなく、これらの状況を排除する方法についての議論に私をもたらします。したがって、質問は十分に奇妙に思えるかもしれません。

フィードバック:回答とコメントで提供されるレシピの 多くを試しました。まず第一に、私はBSoDをもたらすクラッシュには興味がありませんでした(そのため、クラッシュではなくフリーズを説明しました)。

私は、Windows 10 64ビットが多くの方法に対して優れた耐性を示したことを認めなければなりません。ほとんどすべてのCPU負荷方法(fork-bomb、loopsなどを含む)に非常によく対応します。即時エラーを発生させるメソッド(ほとんどのNotMyFaultハングメソッド)は、OSによってリブートまたはシャットダウンされます(これは私が追求したものではありません)。最良の結果は、NotMyFaultのメモリリークメソッドによって実現されました。再起動の機会のない実際のフリーズです。

最後に、Windowsがフリーズすることについて語るMicrosoftのドキュメントの量に感銘を受けました。彼らはこの部分を反対(戦闘凍結)よりもはるかによく知っているようです;-)


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
DavidPostill

3
計算機を使用して実行できる計算があります。これは、完了するまでCPUのコアをフリーズします。クアッドコアマシンでは、明らかに4回実行します。しかし、私は一生、それを引き起こす数学の方程式を思い出すことができません。
mickburkejnr

6
@mickburkejnr 100000の階乗です。「Scientific View」タイプに切り替えて100000を入力し、「n!」を押します。これは、古いWindowsバージョンでうまく機能しました。最近では、この計算に時間がかかる可能性があるという警告が表示され、キャンセルできます。
duenni

25
使い始めてください。
サマジ

5
アップグレードのインストールは常に私にとってはうまくいきました。
ダニエル・R・ヒックス

回答:


230

多分これは助けることができます: キーボードからシステムクラッシュを強制する

USBキーボードを使用する場合、レジストリでキーボード起動クラッシュを有効にする必要があります。レジストリキーHKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parametersで、CrashOnCtrlScrollという名前の値を作成し、0x01のREG_DWORD値に設定します。

これらの設定を有効にするには、システムを再起動する必要があります。

これが完了すると、次のホットキーシーケンスを使用してキーボードクラッシュを開始できます。右端のCtrlキーを押しながら、Scroll Lockキーを2回押します。

または、フォークボムを開始することもできます:このSOの質問を参照してください

NotMyFaultもあります

Notmyfaultは、Windowsシステムでクラッシュ、ハング、およびカーネルメモリリークを引き起こすために使用できるツールです。デバイスドライバーとハードウェアの問題を特定および診断する方法を学習するのに役立ちます。また、正常に動作していないシステムでブルースクリーンダンプファイルを生成するためにも使用できます。


9
ForkBombとNotMyFaultを試しました。リークメソッドの1つは、私が望むことを行うようです。その他は、フリーズではなく再起動/シャットダウンをもたらすため、役に立たない。どうもありがとう。
ハイパー

6
CtrlScrollはBSODをもたらします。デバッグのためにシステムをフリーズするか、単にリブートするかは、ブート設定に依存します。
-grawity

51
Aaannnddd duenniは私のコンピューターの近くでは決して許可されません。今まで。
corsiKa

25

OSが応答しなくなることに対する外部デバイスの反応をテストしているようです。

ハードウェアを仮想化されたWindowsインストールに接続できる場合は、仮想マシンを何度でも一時停止および再開できます。VirtualBox(または他のデスクトップ仮想化)環境に目的のOSをインストールし、使用されているハードウェアインターフェイス(USB、イーサネットなど)をVMに公開します。

その後、仮想マシンを自由に一時停止および再開できます。


24

少なくとも古いバージョンのWindows(数年前)では、以下が機能していました:

無限ループのあるCプログラムを作成しました。

while(1) {}

...次に、タスクマネージャでそのプログラムに「リアルタイムの優先順位」を与えました(これを実行できるAPIもあります)。

マルチコアシステムでは、各コアで1つのループが実行されるように、これを複数回行う必要があります...


39
置く:ことをやっている間より少ないあなたのCPUを加熱する_mm_pause()から#include <immintrin.h>ループで。それはCPUハードウェア命令であり、「スリープ」システムコールではありません。OSに関する限り、プロセスはSuperPIと区別できません。違いは、ループの実行中にCPUが消費する電力量にあります。
ピーターコーデス

5
それがウィンドウのカーネルモード部分の動作を停止するかどうかはわかりません。
CodesInChaos

2
@CodesInChaos:ほとんどのカーネルスレッドは通常の優先度で実行されます。CPUとカーネルごとにこれらのいずれかが行われます。
ジョシュア

x86アセンブリを含む別の手法(STI+ HLT):stackoverflow.com/questions/3747847/…–
meklarian

3
@meklarian:である必要がありますCLI; HLT。ただし、おそらく特権モードから実行する必要があります。原則として、NMIまたは同様のものによってまだ救うことができます。
ネイト・エルドリッジ

10

最も強いカーネルハング(つまり、マウストラッキングなしなど)は、割り込みがオフの状態でコードがカーネルモードで無限ループに入る場合です。

デバイスドライバーを使用してこれを達成することは可能です。さらに良いことに、あなたの制御下でハングを開始および停止するようにドライバーを記述できます(無限ループが制御している状態をテストしていると仮定します)。

このドライバーを作成してインストールする方法は、もう1つまたは3つの質問のトピックになりますが、それが私がとるアプローチです。


9

StackOverflowで次の質問を確認してください。これは、あなたのものに似ています:ウィンドウを短期間フリーズさせる方法

tl; drは、(確実に)実行する方法がないということです。

Windowsをフリーズさせたりハングさせたりするのではなく、単に機器との通信を中断することができます。

あなたの機器が何であり、どのように接続するのか分かりません。たとえば、USBまたはイーサネットアダプターの場合、デバイスマネージャーで簡単に無効にしたり、取り外したりできますか?システムを強制的にクラッシュまたはハングさせると、さまざまな方法でシステムに損傷を与える可能性があるため、何をするかに注意してください。


1
ソフトウェアの結果に満足できない場合は、機器の物理的な切断を検討します。ありがとう。
ハイパー

5

カーネルデバッグモードはオプションではありませんか?

Windows 7でセットアップしましたが、この回答のリンクされた手順ではXP以降が指定されているため、Windows 10で動作するはずです。

私の意見では、FireWire / 1394が最も簡単であるため、FireWire / 1394を介し設定しました。ただし、ネットワークまたはUSB(およびその他)を介して行うこともできます。

基本的に、

昇格したプロンプトで次のコマンドを実行して、ターゲットコンピューターをセットアップします(チャンネルを選択n)。

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

これは、のブートタブに移動し、[ msconfig詳細設定]ボタンを選択するのと同じです。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

次に(ターゲットコンピューターを再起動した後)、ターゲットコンピューターのWinDbgと同じビット数を使用して、ホストコンピューターでWinDbgを実行します。

それは、ホストコンピューターから必要なときにカーネル実行を一時停止するだけの問題です。機器を実行する非同期操作がある場合、これは他の手段と同じくらい効果的です。


面白い方法。ただし、2台目のPCが必要です。しかし、可能であれば試してみます。
ハイパー

2

マウスカーソルが画面上を移動するため、これが完全フリーズに該当するかどうかはわかりませんが、デバイスI / Oエラー、具体的にはハードドライブの障害がある場合、Windows 7 UIは応答しなくなります。私のハードドライブの1つは、SMARTを介して発生する差し迫ったドライブ障害を自己報告し、Windows 7がそれをマウントしますが、保存された特定のファイルにアクセスしようとするとハングします。UIは、ファイルの読み取りが可能になるか、タイムアウト後にドライブのマウントを解除するまで、最大5分間ロックされます(マウスカーソルの移動を除く)。Windowsがシステムクロックをタイムアウトに使用するかどうかはわかりませんが、どうにかして時間をフリーズした場合、タイムアウトの長さを延長できますか?たぶんそこまで行くことはできますが、探している答えが100%になるわけではありません。


2

このバグは、リソースを使い果たすため、Windowsを非常に早くフリーズします。再現も簡単です。

判明したように、これは実際に はコマンドライン(より具体的には)がバッチファイルを解析する方法のバグcmd.exeあり、サービス拒否攻撃をすばやく引き起こす可能性があります。バッチファイルに次の行を(改行なしで)入れると、このバグにより(例として)大量のメモリがすぐに消費されます。

^ nul<^

要するに、キャレットがファイルの最後にある場合、実際のファイルの終わりは「無視」され、ファイルハンドルは0に「リセット」され(本質的に)、バッチが再度解析されます(無限)。


2

これが、デバッグレッスンで使用するアプリケーションのソースコードです。ユーザーモードアプリケーションがDoS攻撃を実行する方法を示しています。

マウスカーソルが移動することはほとんどありません(私のマシンでは11秒に1回)。十分に長く待つと、PCが電源ボタンに反応する可能性があります。

無限ループを使用して動作し、プロセスに最高の優先度を設定し(0x100「リアルタイム」)、スレッドに最高の優先度を設定します(15「タイムクリティカル」)。それらのうち8つが起動し、i7コンピューターに十分です。さらに必要な場合は、ループを調整します。それらの多くは、潜在的に物事をさらに遅くします。

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

このプログラムはC ++で未定義の動作をするので、特定の最適化設定の下では、コンパイラは全体をExitProcess(0)
Ben Voigt

@BenVoigtその場合(つまりでg++-O0十分でない場合、多分gcc -Q -O0 --help=optimizers | grep enabled (そして生き残った最適化を手動で無効にする)ExitProcess(0)問題を解決するかもしれませんか?
ハスター

@BenVoigt:詳しく説明してください。どの部分を未定義の動作と見なしますか?
トーマスウェラー

@BenVoigt IMHOコンパイラーはreturn 0ステートメントの最適化しかできませんwhile(true)。コンパイラーは、これが到達不能なステートメントであることがわかります。
トーマスウェラー

C ++言語では、すべてのスレッドが最終的に進歩することを要求します。これは、いくつかの種類の観察可能な動作の観点から定義されています。無限ループは目に見えるほど進行しないため、コンパイラーは無限ループに到達していないと推測し、それだけでなく、その上のすべてのコードを削除して最も近いブランチに戻すことができます。
ベンフォークト

0

Process LassoにバンドルされているCPUEaterユーティリティを試しましたか? 追伸 私はビツムで働いていません。


「試してみました」ではなく、「試してみました」という意味だと思います。:)
fabspro

@fabspro OPは既に別の回答を受け入れているため、「試してみましたか」は正しいと思います。したがって、私が言及しているイベント(「問題の解決」)は過去のものです。とにかく、あなたが編集を提案した場合、私は喜んでそれを承認するタスクをレビューキューに委任します。出典:englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/...
beppe9000

もし彼が問題を解決していたなら、あなたの問い合わせは彼の答えに対するコメントだったかもしれない-「あなたが問題を研究しているとき、あなたは_______ユーティリティを試したものの1つだった?」おそらく...ただ提案するだけで:)
fabspro

... touché :)
beppe9000

huehuehuehuehue
fabspro

-2

本当に PCをハングアップさせ、完全にフリーズさせたい場合は、そのRAMをすべて使い果たして、ページメモリを強制します。これは単なるフリーズを超えて、実際にはタスクマネージャーを使用することさえできず、キーボードでもできないようになります。プロセスが終了しても、PCの回復には長い時間がかかります。(それは最高!)

たとえば、自分自身へのポインタを持つクラスを作成し、whileループでそのクラスの新しいインスタンスを永久に作成し、新しいインスタンスをそれぞれ前のインスタンスのポインタに保存できます。メモリをより迅速に消費するために、クラスにいくつかのdoubleまたはベクターを追加することもできます。その後、whileループを終了し、すべてを分解するタイマーを使用できます。もちろん、回復するまで少し待つ必要があります。


-4

次のコードでバッチファイルを作成することをお勧めします。

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

これがおそらく最も簡単で安全な方法です。プロセス名を任意のWindowsアプリケーションに置き換えることができます。


3
ほとんどの場合、RAMを使い果たし、ハードドライブがスラッシングされます。コンピュータの仕様によっては、特にリストされているプログラムのうち4つが非常に軽量であるため、コンピュータがこれを継続して機能する可能性があります(iexplore.exeそしてexplorer.exe、より大きな影響を与える可能性があります)。メモリを占有するプロセスを自動的に強制終了します。
MoonRunestar

-10
  1. C:\ Windows \ Temp \に移動します
  2. Ctrl-aを押してすべて選択
  3. Enterキーを押す

8
これを漠然と効果的にするには、何千ものアイテムが必要です!%TEMP%フォルダーが空です...
AlainD

6
これは質問に答えよとする合法的な試みのように見えますが、これがOPの要求どおりにWindowsをロックする結果となることをどのように正確に想定するかは完全には不明です。質問を編集して、OPが望んでいることを行う理由を説明してください。
ツイスティななりすまし

9
これを試してみて、悪意のあるソフトウェアが含まれるドライブバイダウンロードに見舞われたことに気づかなかった人には、申し訳ありません。
MoonRunestar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.