web-dev-qa-db-ja.com

BCD.LOGおよびBOOTSTAT.DATバイナリファイルを解釈するユーティリティ(W7ブートがハングする)

主な質問は次のとおりです。「これらの2つのバイナリファイルを解釈できるユーティリティはありますか。

  1. BCD.LOG
  2. BOOTSTAT.DAT

両方ともVista/W7の起動プロセス中に更新されましたか?

私はすでに EasyBCD を知っていて、 このページ BOOTSTAT.DAT形式について見つけましたが、車輪の再発明はしたくありません。

背景情報

私は不快な立場にあり、ネイティブのWindows 7パーティションが起動プロセスの完了を拒否します(プロンプトを使用したセーフモードでも)。

これは、rawデバイスアクセスを介してVirtualBoxから正常に起動した後に発生しました。実際のところ、VBブートは一貫して正常に機能します。ただし、ネイティブにブートしようとするたびに、ブートプロセスは構成を「修復」しようとします。実際には、外部からのブートです。 PQServiceパーティションを使用して工場出荷時の構成に戻す前に(とにかく新しいマシンです)、問題なくアクセスできるこれら2つのファイルを確認したいと思います。 Ubuntuディスクから。

余談ですが、問題の根本を診断するのに役立つ可能性のある他のファイルがある場合は、私に知らせてください。 winload.exeは、たとえばログを生成しますか(これは2番目の質問です)?

私は、Windows7が検出したHW構成について非常に扱いにくいことをはっきりと認識していることに注意してくださいafter初期インストール。ただし、あきらめるか、ネイティブ/仮想ブートの実験を続けるかを決める前に、どの障害に遭遇したかを詳しく理解したいと思います。

助けてくれてありがとう。

6
Alain Pannetier

BOOTSTAT.DATについてはわかりませんが、BCDはレジストリハイブであり、他のすべてと同じ形式です。 BCD.LOG*ファイルは、リカバリを目的としたHiveのトランザクションジャーナルです。

Windowsマシンを使用している場合は、regeditからHiveをマウントできます。HKEY_LOCAL_MACHINEをクリックし、[ファイル]-> [Hiveのロード]に移動して、BCDファイルを参照します。 Windowsの起動に使用されたBCDは、通常、すでにBCD00000000としてマウントされています。 WindowsNTレジストリHiveファイルの形式に関するドキュメントがいくつかあります。

デュアルブートプロジェクトの場合、ハードウェアプロファイルは、ネイティブハードウェアと仮想ハードウェアのさまざまな構成に役立つ場合があります。それぞれに1つのプロファイルを使用してみてください。

5
Chris Smith

Windows10でBOOTSTAT.DATファイルを解析するための小さなpythonユーティリティを作成しました。Windows7で生成されたBOOTSTAT.DATで使用するための手順もあります。=の最小バージョンpythonこのスクリプトがテストされたのはpython 3.6です。

https://gitlab.com/rhave/bootstat.dat-efi-parser

出力は、JSONまたはsemi-CSVのいずれかです。

プログラムのファイル形式情報の主な情報源は、ChrisSmithが以前に別の回答で言及したGeoffChappellサイトです。

Windows10ファイルで実行する

プログラムは次の方法で実行できます。

python bootstat.dat-efi-parser.py json BOOTSTAT.DAT

ここで、pythonはシステムにインストールされているpythonインタプリタ、bootstat.dat-efi-parser.pyはgitlabからのスクリプトのコピーであり、jsonは出力タイプ(csvの場合もあります)およびBOOTSTAT.DATは分析したいファイルです。

上記の使用例からの出力は、次のようになります。

{
  "version": 4,
  "header_size": 24,
  "file_size": 65536,
  "valid_data_size": 208,
  "unknown_header_dword_0": 24,
  "unknown_header_dword_1": 0,
  "events": [
    {
      "event_name": "Log file initialised",
      "timestamp": 6176,
      "zero_field": 0,
      "source_guid": "2C86EA9DDD5C704EACC1F32B344D4795",
      "size_of_entry": 64,
      "severity_code": 1,
      "entry_version": 2,
      "event_identifier": 1,
      "event_time_struct": "2018-01-01 12:00:00",
      "event_zero_field_0": 0,
      "event_seven": 7,
      "event_one": 1,
      "event_zero_field_1": 0
    },
    {
      "event_name": "Boot application launch",
      "timestamp": 6177,
      "zero_field": 0,
      "source_guid": "2C86EA9DDD5C704EACC1F32B344D4795",
      "size_of_entry": 120,
      "severity_code": 1,
      "entry_version": 2,
      "event_identifier": 17,
      "event_app_guid": "80A054721015854EAC0FE7FB3D444736",
      "event_type_of_start": 0,
      "event_app_pathname": "\\windows\\system32\\winload.efi"
    }
  ]
}

Windows7ファイルで実行する

Windows 7では、BOOTSTAT.DATファイルに追加の2048バイトのヘッダーがあります。これをファイルから切り離すと、スクリプトはファイルの残りの部分を解析できるようになります。 Linuxでは、ddコマンドを使用して、次の方法で最初の2048バイトを切り取ることができます。

dd if=bootstat.dat of=bootstat.dat.cut bs=1 skip=2048

ここに bootstat.datは元のWindows7ファイルであり、bootstat.dat.cut fileは、pythonスクリプトの最後の引数として指定する必要があるファイルです。ddまたはhexeditorと同等のWindowsを使用して、Windowsで同じカットを実行できます。

3
Rasmus Have