在Linux环境下离线识别Windows版本

我试图定制一个Clonezilla Live ISO,以便能够方便地拍摄不同Windows安装(XP,Vista,Win7,Win8)的快照。 理想情况下,我想在自动识别Windows版本的光盘上启动计算机,并创build一个包含操作系统名称的快照(如Windows_XP_2013-06-17 )。

有没有一种方法可以在Linux环境中安装的NTFS分区上编程识别安装的Windows版本

您可以使用string命令来访问registry文件,我在我的机器上testing,它的工作:

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

输出继电器:

 6.1.7601.17608 

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

我认为这是比使用一些工具来处理PE文件或registry文件的属性更快的方法。

有几个非Windows和非命令解决scheme,您可以使用您的问题。 以下是我的一些想法:

Boot.ini文件

尝试从Windows引导分区(即C:\ boot.ini)文本文件读取boot.ini。 这(通常)有一个默认的启动信息,如果它没有被手动改变。 您可以阅读文本文件并执行RegEx查找版本。

例如,我的boot.ini具有“Microsoft Windows XP Professional”部分,可以使用任何正则expression式轻松parsing该部分。

检查文件系统结构

通过查找它所使用的目录结构,您可能会得到关于Windows常规版本的一些线索:Windows XP系列使用C:\ Documents and Settings种类的目录结构(与语言相关),因为其他更高版本使用不同types的目录。

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

CMD.EXE

对于这一个我不完全确定,但我想我记得Windows的命令提示符二进制文件(cmd.exe)有一个版本存储到它。 通过阅读二进制文件和它的资源,可以帮助确定正确的版本。

不过,在所有这些解决scheme中,我build议您尝试阅读boot.ini。 这是用户可定制的,但很less被普通用户改变。

看ntoskrl.exe版本信息提供数字和文字的结果

 me@host:/mnt$ iconv -cf utf16 Windows/System32/ntoskrnl.exe|strings|grep 6\\. 6.1.7601.18409 (win7sp1_gdr.140303-2144) 6.1.7601.18409 

您可以使用chntpw工具访问Windowsregistry。 您需要位于HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion的以下项:

 ProductName Version VersionNumber SubVersionNumber 

您可以创build一个脚本来自动化chntpw并parsingregistry项来识别Windows版本。

获取魔法果冻豆Keyfinder。 便携式免费版本正常工作。

启动它,并在工具菜单下select>>加载configuration单元。 然后显示您的所有驱动器,select有问题的驱动器的Windows文件夹。