Linux 环境下离线识别 Windows 版本

Linux 环境下离线识别 Windows 版本

我正在尝试定制一个克隆兹拉Live iso 可以方便地拍摄不同 Windows 安装(XP、Vista、Win7、Win8)的快照。理想情况下,我希望在 CD 上启动机器,该 CD 会自动识别 Windows 版本并创建一个包含操作系统名称的快照(类似于Windows_XP_2013-06-17)。

有没有办法以编程方式确定 Windows 版本是否安装在 Linux 实时环境中挂载的 NTFS 分区上?

答案1

您可以使用字符串命令来访问注册表文件,我在我的机器上测试过并且有效:

strings /media/cuonglm/Windows/Windows/System32/config/SOFTWARE | grep -e '^6.1.*' | head -n 1

输出:

6.1.7601.17608

它表示我的版本是 Windows 7 SP1。

我认为这是比使用一些工具来操作 PE 文件或注册表文件的属性更快捷的方法。

答案2

您可以使用 等工具访问 Windows 注册表chntpw。您需要以下注册表项,位于HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion

ProductName
Version
VersionNumber
SubVersionNumber

您可以创建一个脚本,自动chntpw解析注册表项以识别 Windows 版本。

答案3

有几种非窗口和非命令解决方案可用于解决您的问题。以下是我想到的一些想法:

启动文件

尝试从 Windows 启动分区(即 C:\boot.ini)文本文件读取 boot.ini。如果尚未手动更改,则此文件(通常)具有默认启动信息。您可以读取文本文件并执行 RegEx 来找出版本。

例如,我的 boot.ini 有“Microsoft Windows XP Professional”部分,可以用任何正则表达式轻松解析。

检查文件系统结构

通过查看 Windows 使用的目录结构,您可能会获得有关 Windows 通用版本的一些线索:Windows XP - 系列使用 C:\Documents and Settings 类型的目录结构(依赖于语言),因为其他更高版本使用不同类型的目录。

这不是一个好的解决方案,但它是一个解决方案。

命令执行程序

对于这一点我不太确定,但我记得 Windows 的命令提示符二进制文件 (cmd.exe) 中存储了一个版本。通过读取二进制文件及其资源,可以帮助确定正确的版本。

不过,在所有这些解决方案中,我建议您尝试阅读 boot.ini。它是用户可自定义的,但普通用户很少会更改。

答案4

使用 Linux,这里是 Ubuntu,您可以使用chntpw

我这样做了:

sudo apt install chntpw
chntpw -e /path/to/windisk/Windows/System32/config/SOFTWARE
cat \Microsoft\Windows NT\CurrentVersion\ProductName

并被告知版本是Windows 10 Home。请注意,路径中的大小写可能因版本而异,因此如果它不起作用,请查看。其中一个程序还提到RegBack路径中出现了一个文件夹(抱歉,我忘了在哪里)。

可以通过其他键找到其他详细信息。要列出 中的其他键CurrentVersion,请在 中chntpw执行

ls \Microsoft\Windows NT\CurrentVersion

相关内容