今日Windows7にログインすると、私のPCは即座にBSODになりました。 WhoCrashedを使用すると、次のレポートが表示されます。
-
これは典型的なソフトウェアドライバのバグのようであり、ハードウェアの問題が原因ではない可能性があります。クラッシュはWindowsカーネルで発生しました。この問題は、現時点では特定できない別のドライバーが原因である可能性があります。
-
さて、 私のPCはクラッシュ/フリーズしていました 過去に特定のパフォーマンスの高いタスクで時々発生しましたが、その原因は(私が思ったように)マザーボードのRAMスロットの欠陥でした。そのスロットを空のままにしておくと、クラッシュが停止しました。
今日、それは再びクラッシュしました、そして私はハードウェア関連のものを何も変更していません。
このバグチェックコードの意味を読んでGoogleを回ることができることは知っていますが、最近、誰かからの個人的な経験(同じバグチェック/問題)がはるかに役立つことに気付きました。特に、この人が解決。
どうもありがとうございました!
この場合、スレッドで例外が発生しました
C0000096: STATUS_PRIVILEGED_INSTRUCTION
Executing an instruction not allowed in current machine mode.
このエラーはCPU自体によって発生しました。一部のコードは、許可されていない命令を実行しようとしました。おそらくこれはメモリ破損が原因です。カーネルコードがジャンクデータを実行しようとした場所。
この種のエラーを特定することは実際には不可能です。 "kernel"コードにエラーが発生しましたが、発生してはなりませんでした。 Microsoftのコードのいずれかにソフトウェアのバグがある可能性は非常に低いです。それはあなたが他の場所を見始めるときです。
オーバークロック。オーバークロックすると、非常に奇妙なことが起こることがあります。うまくいけば、誰もがマイクロソフトにクラッシュダンプを送っています。マイクロソフトがそれらを調査しているからです。彼らが得る一般的なエラーは、CPUが命令を実行しているときです:
xor eax, eax;
これは、CPUが実行できる非常に単純な操作です。内部CPUレジスタEAX
をゼロに設定するだけです。失敗する可能性のある方法はありません。あなたがオーバークロックするときを除いて-または他の物理的な問題。
tl; dr:ソフトウェアを排除した場合、それはハードウェアです。
このエラーを見たときに、ほとんど無意識のうちに、私が経験した詳細に言及したいと思いました。
1つ目は、実際のバグチェックコードです。
0x1000007E - SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
GoogleでそれをBingすると、Microsoftのドキュメントページが表示されます
バグチェック0x1000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
これは、システムスレッドがエラーハンドラーがキャッチしなかった例外を生成したことを示しています。
開発者としての経験から、私のアプリケーション(またはそのスレッドの1つ)で「例外」が発生し、では発生しないことを知っています。 「handle」例外。Windowsは最終的にアプリケーションを強制終了することでそれを処理します。カーネルモードで未処理の例外が発生した場合、OSはカーネルをシャットダウンして処理するしかありません。私が興味を持ったのは、whichexceptionがスローされていたことです。 i仮定(誤って判明)それは「アクセス違反」でした。
すべてのバグチェックには、実際に何が起こったかを説明する4つのパラメーターが付随していることを私は知っています。
しかし、これらはどういう意味ですか?!それは、それらについて説明していないドキュメントページに戻るときです。しかし、それはは言います:
バグチェック0x1000007Eは、 バグチェック0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED)と同じ意味とパラメーターを持っています。
優秀な。そして、この他のページはパラメータを文書化しています:
SYSTEM_THREAD_EXCEPTION_NOT_HANDLEDパラメーター
次のパラメータがブルースクリーンに表示されます。
- パラメーター1:処理されなかった例外コード
- パラメータ2:例外が発生したアドレス
- パラメータ3:例外レコードのアドレス
- パラメータ4:コンテキストレコードのアドレス
これは私が欲しかったものです、処理されなかった例外コード。あなたの場合、それは例外コードでした:
0xFFFFFFFFC0000096
コードが64ビット長であるため、経験から、64ビットWindowsで実行していることがわかります。本当に私は下位32ビットだけが欲しいです:
0xC0000096
通常、開発ディレクトリのwinerror.h
でそのエラーコードを見つけることを期待していました。しかし、それはありませんでした。 Bingingが必要でしたが、次の検索を行ったことがわかりました。
winerror C0000096
winehq のページに移動します。これは、定数を宣言しています。
STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096
その定数をビンビンにすると、私は 正規のMicrosoftドキュメントページ :
ハードウェアの例外
STATUS_PRIVILEGED_INSTRUCTION
:現在のマシンモードでは許可されていない命令を実行しています。
また、この例外がCPU自体によってスローされることも知っています。 「特権命令」は、許可されていないCPU命令を実行しようとしたことを意味するためです。ページがハードウェア例外と呼ばれているので、私もこれを知ることができます。
つまり、想定外のCPU命令を実行しようとするコードが実行されていた時点です。 2つの可能性があります:
Microsoftのコードは、毎日何百万ものマシンでフィールドテストが行われていることを考えると、次のような可能性が高くなります。
とにかく、それはhow私がそのバグチェックに取り組んだ方法でした。たぶん、私がそれをどのように経験したかを知ることによって、次にバグチェックをするときにあなたを助けることができます。