XP 疑云

前天又向专家求教,问题是:我有两个磁盘,一个的第一个分区是 Windows XP,另一个上已经有 Windows 7(在第二个分区,第一个分区是 Linux);把 Windows XP 复制到 Windows 7 所在磁盘的第三个分区上,用 EasyBCD 添加 Windows XP 到引导菜单成功;重启引导该 Windows XP,可以进行到登录界面,但是无法登录。检查了源系统,设置的是 administrator 的自动登录,密码为空,且源系统自动登录无碍。开始以为是迁移工具以文件复制的方式工作时导致了权限问题,后来用 xcopy /k /x /y 以及 Linux 的 dd 命令重新迁移了各一次,最后的效果都完全一样。

这个案例的难点在于,不让登录,基本就无从下手分析。最开始的时候,Windows XP 有个登录前的漏洞,可以唤出某些工具的 CHM 帮助,从而访问到本地文件,可惜这个途径是封死的。仔细研究了一下在此界面可以交互的对象:1. Win-U 热键唤出的“辅助工具管理器”本身(utilman.exe);2. 辅助工具管理器可以管理执行的两个工具,放大镜和屏幕键盘;3. 智能 ABC 输入法的提示窗口。均未能找到突破口。在 Windows 7 下对 Windows XP 的 system32 目录进行操作,将 utilman.exe 还有 narrator.exe 使用 notepad.exe 替换后,并不能如愿得到记事本窗口(主要目标是打开/保存文件的对话框,可以直通文件系统)。

在 Windows 7 下,离线挂在 Windows XP 的注册表文件(HKEY_LOCAL_MACHINE 下的键,对应的存储位于 system32\config 下,system 跟 software 是分开文件),定位到 Winlogon 键,发现缺少 AutoAdminLogon 值(特别注意,这竟然是个字符串类型的值,一开始创建成 DWORD 类型,无效),将之设置为 “1” 后,自动登录行为产生,但是瞬间又会自动登出,如此不停反复循环。

许多许多年前,老夫还在瑞星的时候,写过一个登录前可以打开命令提示符的交互式服务,是时候用考古的手段解决问题了。用珍藏的便携版 Visual C++ 6,编译珍藏的代码,得到 release 可执行文件,手动用上述离线编辑的方法在注册表里添加服务,无效果。

此时,已经与专家逐步形成趋同的见解,由于源和目标所处的分区在磁盘上位置不同,可能导致 Windows XP 启动时文件系统的组织受到了影响。第一时间重新编辑服务相关的注册表项,将 ImagePath(谢天谢地,这个值的类型是 REG_EXPAND_SZ,可以带入环境变量,否则还得手动尝试遍历)从 “C:\xxx\zzz.exe” 的形式改成了 “%systemroot%\zzz.exe” 的形式,果然通过。双击久违的图标后,命令提示符出现了,$P$G 的展开形式确实是 D:\Windows\System32,系统盘符不再是 C,而是 D,这显然会导致许多文件访问失败,包括用户的 profile 等。

之所以一开始直接想到这里,是因为一直有一个认识,系统盘符会被 Windows 系统强行分配为 C。在网上大致搜索了一下,据说 Windows 7 以及以后的系统才采取这样的策略,但也有人说 Windows 8 仍然有系统盘符不是 C 的情况,所以存疑。

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注