用于解释 BCD.LOG 和 BOOTSTAT.DAT 二进制文件的实用程序(W7 启动挂起)

用于解释 BCD.LOG 和 BOOTSTAT.DAT 二进制文件的实用程序(W7 启动挂起)

主要问题是:“是否有任何实用程序可以解释这两个二进制文件:

  1. 故障诊断日志
  2. 启动状态文件

它们都在 Vista/W7 启动过程中更新了吗?

我已经知道易BCD我发现这一页关于 BOOTSTAT.DAT 格式,但我不想重新发明轮子。

背景信息

我处于一个不舒服的境地,我的原生 Windows 7 分区拒绝完成启动过程(即使在有提示的安全模式下)。

这是在通过原始设备访问从 VirtualBox 成功启动后发生的。事实上,VB 启动一直运行良好。但是,每次我尝试本机启动时,启动过程都会尝试“修复”配置。从外部来看,它会让磁盘旋转很长时间,最终停滞在某个地方。在我使用 PQService 分区恢复出厂配置(反正它是一台新机器)之前,我想看看这两个文件,我可以从 Ubuntu 磁盘毫无问题地访问它们。

另外,如果还有其他文件可以帮助诊断问题的根源,请告诉我。例如,winload.exe 是否生成日志(这是次要问题)?

请注意,我很清楚 Windows 7 对它找到的硬件配置非常敏感初始安装。然而,在决定是放弃还是继续尝试本机/虚拟启动之前,我想更详细地了解我遇到了哪些障碍。

谢谢您的帮助。

答案1

我不知道,BOOTSTAT.DATBCD它是一个注册表配置单元,格式与其他所有配置单元相同。这些BCD.LOG*文件是配置单元的事务日志,用于恢复目的。

如果您有一台 Windows 计算机,您可以从 regedit 安装配置单元:单击HKEY_LOCAL_MACHINE,转到文件->加载配置单元并浏览到 BCD 文件。用于启动 Windows 的 BCD 通常已安装为BCD00000000。有一些关于 Windows NT 注册表配置单元文件格式的文档。

对于您的双启动项目,硬件配置文件可能有助于本机和虚拟硬件的不同配置 - 尝试为每个配置使用一个配置文件。

答案2

我制作了一个小型 Python 实用程序来解析 Windows 10 上的 BOOTSTAT.DAT 文件。还有关于在 Windows 7 生成的 BOOTSTAT.DAT 上使用它的说明。此脚本测试过的 Python 的最低版本是 Python 3.6。

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

输出可以是 JSON 或半 CSV。

该程序的文件格式信息的主要来源是 Chris Smith 之前在另一个答案中提到的 Geoff Chappell 网站。

在 Windows 10 文件上运行它

该程序可以按以下方式运行:

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"
    }
  ]
}

在 Windows 7 文件上运行它

在 Windows 7 上,BOOTSTAT.DAT 文件有一个额外的 2048 字节标头。从文件中删去此标头可使脚本能够解析文件的其余部分。在 Linux 上,可以使用 dd 命令按以下方式删去前 2048 个字节:

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

bootstat.dat是原始的 Windows 7 文件,该bootstat.dat.cut文件是应该作为 Python 脚本的最后一个参数给出的文件。可以使用相当于 Windows 的 dd 或十六进制编辑器在 Windows 上执行相同的剪切操作。

相关内容