ブルースクリーン情報下書き - 適宜覚書-Fragments

ブルースクリーン情報下書き

      2017/03/02

ブルースクリーンエラーと言うとWindowsの致命的エラーということで煮ても焼いても食えないようなものという認識が一般的な気がする。というか、少なくとも俺はそういう認識がある。一部のエラーに至っては「死のエラー」とか言われて再起不能。とりあえずFDISKしてからOSインストールし直すかPC買い直せってくらい悲惨な状態になる。仕事でPCメンテナンスしているなら復帰工数はある程度見えるけど、家のPCだと環境の保全を真面目にやるのはなかなか難しい。

ところで、ブルースクリーンエラーって何?…という根本的な話はあまり知られていないような気がする。名前通り青地に白文字のエラーでStop 0x0000001eとか16進数のエラーコードをサポート技術情報検索やGoogle等で検索する時以外極力見たいものではないから仕方ないけどな。[Support Webcast] 基本的な "ブルー スクリーン" エラーのトラブルシューティングに概要の説明があるが、如何せんウェブキャストもプレゼン資料も英語だ。いつもの如くいい加減に和訳したのでそれを元に整理する。

Windows NT系のOSの内部アーキテクチャ

Windows NT系のOSの内部アーキテクチャは、カーネルモードとユーザモードに分けることができる。

  • カーネルモード -- 特権、ハードウェア・メモリ・HAL・NTサービスへの直接のアクセス。スケジューラ,メモリ管理,プロセス管理などのプリミティブなNT Excutiveな部分であり、ユーザモードとは隔離されている。
  • ユーザモード -- 低い権限、ハードウェアへの直接のアクセス権限は無く、システムリソースにリクエストするにはAPI、環境変数、統合化サブシステムを使う。

STOPエラー発生理由

ブルースクリーンエラー(以降STOPエラー)は、以下の理由で発生する。

  • サービス、アプリケーション、デバイスドライバが上手く動作しなかったり、互換性が無い場合
  • ハードウェアの問題
  • ディスクまたはシステムの破損
  • ファームウェア、BIOSが古過ぎるか互換性が無い
  • ウィルス感染

STOPエラー発生タイミング

STOPエラーの発生タイミングは次の4つに分かれる。

  • スタートアップ時間(起動順序の4つのフェーズ)不足
  • CPUによって検知されたソフトウェアの状態
  • CPUによって検知されたハードウェアの誤動作
  • 上記に当てはまらないSTOP コードの残り全て

WindowsNTでのSTOPエラー分析

WindowsNTの場合、STOPエラーには5つのセクションがある。

  • ポートのステータス情報のデバッグ
    • ちょうどモデムのSnd/Rcv インジケータのようなもの
  • バグチェック情報
    • 記号化されたエラーコードや4つのバグチェックパラメータを16進数形式で含む
  • メモリにロードされたドライバ情報
    • 第1列 -- ロードする基本アドレス
    • 第2列 -- 16進数形式の日時値
    • 第3列 -- 全てのドライバの名前
  • カーネルのビルド番号とスタックダンプ
    • Ntoskrnl.exeのバージョン
    • 残りは失敗したモジュールに関係するアドレスの範囲を示すスタックダンプ
  • ポート情報のデバッグ
    • COM パラメータの確認
    • Memory.dmpファイルの生成がされたかどうかを表示する場合もある。

Windows2000でのSTOPエラー分析

Windows2000の場合、STOPエラーには3つのセクションがある。

  • バグチェック情報
    • 記号化されたエラーコードや4つのバグチェックパラメータを16進数形式で含む
  • ユーザの操作への勧告
    • エラーから復帰するための提案情報リストを提供する
  • ポート情報のデバッグ
    • ちょうどモデムのSnd/Rcvインジケータのようなもの

Memory.dmp

Memory.dmpとはクラッシュ時点のコンピュータの情報を含むファイルであり、クラッシュの根本原因を確定するデバッグプロセスで利用される。クラッシュの発生時随時自動的に生成される。また、このファイルを作成するよう設定されていればSTOPエラーが生成される。

ファイルの整合性はWindows NT、Windows2000CD-ROMに含まれるDumpchk.exe ユーティリティを使用して検証出来る。

関連情報

Windows 2000のMemory.dmp設定オプション

以下の3種から選択して設定出来る。

  • 完全メモリ ダンプ:上書き保存(%SystemRoot%\Memory.dmp)
    • とにかく全部入り
  • カーネル メモリ ダンプ:上書き保存(%SystemRoot%\Memory.dmp)
    • 完全から未割り当てメモリやユーザー モード プログラムに割り当てられたメモリ分を除外したもの
  • 最小メモリ ダンプ (64 KB):毎回新規作成(%SystemRoot%\Minidump\Mini022900-01.dmp形式で各個別)
    • STOP メッセージとパラメータ、およびその他のデータ
    • 読み込まれているドライバのリスト
    • 停止したプロセッサのプロセッサ コンテキスト (PRCB)
    • 停止したプロセスのプロセス情報とカーネル コンテキスト (EPROCESS)
    • 停止したスレッドのプロセス情報とカーネル コンテキスト (ETHREAD)
    • 停止したスレッドのカーネル モードの呼び出し履歴
関連情報

メモリダンプの設定値

基本的に、[コントロールパネル] -[システム]-[詳細]タブ-[起動/回復]で表示されるGUIで設定するが、設定値はレジストリに保存される。

  • HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\Session Manager
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl
    • CrashDumpEnabled
    • AutoReboot
    • DumpFile
    • LogEvent
    • MinidumpDir
    • Overwrite
    • SendAlert

強制メモリダンプ

以下の2つの設定を行い、「スクロールロック」キーを押しながら、右の「CTRL」キーを2回押下する。

  • 起動時回復オプションでMemory.dmpを生成するよう設定
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters\でCrashOnCtrlScrollというキーに対してREG_DWORDで0x1を指定
関連情報

WindowsXPの場合、Microsoft Windows エラー報告(WER)のダイアログが表示され、Microsoftへの情報提供を承諾するとMicrosoft オンライン クラッシュ ダンプ解析 (MOCA)Web サービスに情報を送信する。正直役立っているかどうか判然としないシステムだが、たまに当たりを引く場合もあるので駄目元でも確認しておいた方が良い。

適宜覚書-Fragmentsは、筆者が興味をもった様々な情報やネタを筆者が忘れても後で思い出せるよう覚書として公開するBlogです。Google Chrome拡張、Facebook、Google、Twitter、Windows、各種Webアプリなどを扱うことが多いです。この覚書が、もし何かお役立ちになれば幸いです。

 - Google, Windows, 覚書 , , , , , ,