web-dev-qa-db-ja.com

BSOD-バグチェックの意味?

今日Windows7にログインすると、私のPCは即座にBSODになりました。 WhoCrashedを使用すると、次のレポートが表示されます。

-

  • 2013年2月12日火曜日13:56:20GMTにコンピュータがクラッシュしました
  • クラッシュダンプファイル:C:\ Windows\Minidump\021213-27390-01.dmp
  • 稼働時間:00:00:25
  • これはおそらく次のモジュールが原因でした:ntoskrnl.exe(nt + 0x1AA698)
  • バグチェックコード:0x1000007E(0xFFFFFFFFC0000096、0xFFFFF80003610698、0xFFFFF8800614C7B8、0xFFFFF8800614C010)
  • エラー:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
  • ファイルパス:C:\ Windows\system32\ntoskrnl.exe
  • 製品:Microsoft®Windows®オペレーティングシステム
  • 会社:Microsoft Corporation
  • 説明:NTカーネルとシステム
  • バグチェックの説明:これは、システムスレッドがエラーハンドラーがキャッチしなかった例外を生成したことを示します。

これは典型的なソフトウェアドライバのバグのようであり、ハードウェアの問題が原因ではない可能性があります。クラッシュはWindowsカーネルで発生しました。この問題は、現時点では特定できない別のドライバーが原因である可能性があります。

-

さて、 私のPCはクラッシュ/フリーズしていました 過去に特定のパフォーマンスの高いタスクで時々発生しましたが、その原因は(私が思ったように)マザーボードのRAMスロットの欠陥でした。そのスロットを空のままにしておくと、クラッシュが停止しました。

今日、それは再びクラッシュしました、そして私はハードウェア関連のものを何も変更していません。

このバグチェックコードの意味を読んでGoogleを回ることができることは知っていますが、最近、誰かからの個人的な経験(同じバグチェック/問題)がはるかに役立つことに気付きました。特に、この人が解決。

どうもありがとうございました!

4
cr0z3r

この場合、スレッドで例外が発生しました

C0000096: STATUS_PRIVILEGED_INSTRUCTION
          Executing an instruction not allowed in current machine mode.

このエラーはCPU自体によって発生しました。一部のコードは、許可されていない命令を実行しようとしました。おそらくこれはメモリ破損が原因です。カーネルコードがジャンクデータを実行しようとした場所。

この種のエラーを特定することは実際には不可能です。 "kernel"コードにエラーが発生しましたが、発生してはなりませんでした。 Microsoftのコードのいずれかにソフトウェアのバグがある可能性は非常に低いです。それはあなたが他の場所を見始めるときです。

  • サードパーティドライバー。カーネルモードドライブは、物理ハードウェアに完全にアクセスできます。サードパーティのドライバー(ビデオ、サウンド、ネットワーク、USB 3.0、SATAなど)の漂遊バグ。システム内の他のコードやデータが破損する可能性があります。 次のステップ:新しく追加されたハードウェアを削除してみて(一部のサードパーティドライバーがロードされないように)、セーフモードで起動してみてください(一部のサードパーティドライバーがロードされないように)ロード済み)、またはWindowsを再インストールします(一部のサードパーティドライバーはロードされません)
  • 不良RAM。ビットが反転し、完全に無害な命令が別の無効な命令に変わった場合、このエラーが発生する可能性があります。 次のステップ:RAMスティックを取り外し、RAMを他のスロットに移動し、クロックを外しますRAM、電源を変更します
  • オーバークロック。オーバークロックすると、非常に奇妙なことが起こることがあります。うまくいけば、誰もがマイクロソフトにクラッシュダンプを送っています。マイクロソフトがそれらを調査しているからです。彼らが得る一般的なエラーは、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つのパラメーターが付随していることを私は知っています。

  • パラメーター1:0xFFFFFFFFC0000096
  • パラメータ2:0xFFFFF80003610698
  • パラメーター3:0xFFFFF8800614C7B8
  • パラメーター4:0xFFFFF8800614C010

しかし、これらはどういう意味ですか?!それは、それらについて説明していないドキュメントページに戻るときです。しかし、それは言います:

バグチェック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つの可能性があります:

  • メモリが破損しました。ソフトウェアはそのコードを実行しようとするように書かれていませんでしたが、それがRAMに残っただけです
  • それは本当にバグのあるソフトウェアであり、許可されていないことをしようとしました。

Microsoftのコードは、毎日何百万ものマシンでフィールドテストが行​​われていることを考えると、次のような可能性が高くなります。

  • ハードウェアに問題がある
  • 問題を引き起こす他の誰かのコードのバグ

とにかく、それはhow私がそのバグチェックに取り組んだ方法でした。たぶん、私がそれをどのように経験したかを知ることによって、次にバグチェックをするときにあなたを助けることができます。

11
Ian Boyd