我正在尝试定制一个克隆兹拉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