プログラムでWindows XP以降のバージョンでBSODを発生させる方法はありますか?
ところで、明確にするために、これは悪意のある目的のためではありません。クライアントは、この方法でLAN上の端末をシャットダウン/再起動できるように要求しました。理由を尋ねると、通常の再起動よりも速いので、彼らは言った... :)
(「プログラム的に」どの部分が、誰がこれをスーパーユーザーに移行したのかわからないのか興味があります。
キーボードドライバは、BSODを引き起こすように指示できます。
HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters
または(古いPS/2キーボードの場合)
HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
そして、CrashOnCtrlScroll
という名前のREG_DWORD
を1
に設定します。
次の再起動後、ブルースクリーンを強制することができます Ctrl+ScrollLk+ScrollLk。この場合、バグチェックコードは0xE2(MANUALLY_INITIATED_CRASH)になります。
本当にプログラムによる方法が必要な場合は、そのマシンのドライバーに穴を見つけるか、単純なドライバーを作成してインストールする必要がありますKeBugCheck
またはKeBugCheckEx
のいずれかを呼び出します。
楽しんで ;)
Side-note:ドライバーの作成者にとって、またはマルウェアを処理する場合でも、意図的にこのようなクラッシュを引き起こすと非常に便利です。フルメモリダンプを作成するようにシステムを構成した場合は、実行中のシステムのイメージが得られ、さらに分析することができます。デバッガーが必ずしもすべての場合に役立つとは限らないデッドロックのような場合を考えてみてください。
NotMyFaultをお試しください!
正確な原因はわかりませんが、Vistaと7では、デフォルトでシステム障害時にシャットダウンし、BSODが表示されないと思います。
一般に、BSODは、オペレーティングシステムまたはハードウェア内で問題が発生したときに発生します。オペレーティングシステムの作成者とハードウェアベンダーは、悪いソフトウェアエンジニアが製品の見栄えを悪くし、ユーザーエクスペリエンスを損なうことを認めていないため、どちらか一方の内部で問題が発生するのは本質的にかなり困難です。
ドライバーを作成することは、オペレーティングシステムとハードウェアに十分に近づき、そのようなエラーを引き起こす数少ない方法の1つです。もちろん、このようなドライバーのインストールは、意図的な知識と管理者権限なしで一般的に行うことではないため、悪意のある目的でこれを使用することはかなり困難です。この種のアクセスを使用すると、BSODやそのような手段がなくても、はるかに多くの害を及ぼす可能性があります。
BSODはカーネルパニックです。これはカーネルの一部を意味し、オペレーティングシステムのコアそのものが本当に悪いことをしました。それはおそらくメモリを走り書きし、それが持つべきではないコードを実行したのかもしれません。プログラム的には、カーネルスペースでコードを取得し、それをオンデマンドでトリガーする必要があります。製品サーバーにとっては少し危険です。
通常のWindowsマシンには、プロセスとカーネルに多くの状態があります。状態を一定に保つために必要なクリーンアップが何であれ、それを短絡させただけです。
具体的には、BSODは(通常)カーネル(またはドライバー)のバグであり、カーネルは悪い状態にあるため、クリーンアップできないと感じて再起動し、そうでないという理由だけで良い状態を失います。何が良くて何が悪いかを知っています。バッファをディスクにフラッシュできませんでした。次に、再起動時にクリーンアップを試みますが、シャットダウン/パニックで多くのコンテキストが失われるため、パニックからの良い残りと悪い残りの両方を選択する必要がある、保守的なクリーンアップになります。
したがって、シャットダウン時の利点の一部は起動時に失われます。これは、脚が下から切り取られた場所を把握する必要があるためです。 chkdskを実行し、部分的な書き込み状態にあったディスクブロックをクリーンアップする必要があります。 USBディスクはたくさんキャッシュします。キャッシュをオフにすると、クラッシュ時にデータが失われる可能性が低くなりますが、キャッシュしないと速度が低下します。どのファイルを失っても構わないと思いますか?
要するに、これは悪い考えです。これが発生した本番マシンは、クリーンアップ後も不安定な状態になる可能性があります。これは悪いです。
シャットダウンして再起動するだけだと思います。サーバーが起動しないか、プログラムを起動できないため、サーバーを最初に再構築する必要があるときに得られると思われる時間の節約が失われます。
Csrss.exeプロセスを強制終了すると、BSODが発生することに注意する必要があります。ただし、最新のWindows(8、8.1)ではありません。
https://www.mpgh.net/forum/showthread.php?t=1100477 のコードスニペットはWindows10.17134で動作します
#include <windows.h>
#pragma comment(lib, "ntdll.lib")
extern "C" NTSTATUS NTAPI RtlAdjustPrivilege(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
extern "C" NTSTATUS NTAPI NtRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);
void BlueScreen()
{
BOOLEAN bl;
ULONG Response;
RtlAdjustPrivilege(19, TRUE, FALSE, &bl); // Enable SeShutdownPrivilege
NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response); // Shutdown
}
イベントログに痕跡がないようです。ミニダンプには確かに痕跡がありますか?