Chroot 通常被视为一种沙盒。但在 Unix 中,它也允许在某些不可引导的安装上使用程序。当我在 chroot 中搜索 windows 时:我看到了沙盒之类的东西。我不想要安全,我想要一种拯救系统的方法。例如,如果我使用 ntpasswd 禁用了syskey,则使用此类实用程序运行 C:\windows\system32\syskey.exe 会修改脱机安装的注册表项,而不是当前安装项。对于替代用户,它可以称为 runon,类似于 runas。
chroot 在这里对 Windows 意味着什么?好吧,有一个 winre 允许拥有与您的 Windows 安装相同的驱动器号。有一个例子:compact.exe 在 winre 安装中不存在。如果你 cd 到 \%Windir%\system32 (离线安装的目录)并运行紧凑,它不会工作(除非你使用 /?)。如果你跑
X:\sources\>path C:\Windows\System32\
您现在可以使用离线窗口中的文件。诸如 ntdll.dll 或最终 gdi.dll 之类的基本 dll 是来自 C:\Windows\System32 而不是 X:\%windir%\system32 的基本 dll,并且运行 compact 将起作用。
但是以这种方式运行的程序将使用当前的注册表。主键(HKLM;HKCC;HKCR;HKCU;HKU;HKEY_PERFORMANCE_DATA)及其内容是当前 winre/pe 安装的那些,而不是您在 Windows 中启动时拥有的那些。因此,如果一个程序要修改某些注册表项,它会修改 X:\windows\system32\config 的 Hives,而不是位于 C:\systemdrive 中的那些。
可以在 HKLM 下挂载离线窗口的 Hives 并对其进行编辑,但是在 HKLM\Software 中包含其信息的程序仍然会查看 HKLM\Software 而不是您挂载的名称。
我正在寻找的实用程序将(部分?)隐藏 winpe/re 的注册表,以支持离线安装中存在的注册表。预期的效果是,如果您使用该实用程序启动注册表编辑器,您将看到这些键,就像您将启动到 Windows 中一样。(也许有一些例外?)
该应用程序仍将使用当前窗口的 Microsoft 服务。我想启动在当前未安装的离线窗口上安装的服务。即使对于内核来说,这样做也很好。通过这种方式,当您在 unix 中启动 sysv 守护程序时,您将具有相同的行为。除了这里,一些避免双重实例的机制可能是必要的,因为这些问题在 Windows 上会更加严重
用户访问权限是微软系统的重要组成部分。可能需要在命令行参数中指定用户名和密码。错误的用户数据库配置会出现一些问题并阻止 Windows 启动。如果要再次启用syskey,则需要有无法使用的身份验证信息。但在某些情况下,如 syskey 问题,它会使 Windows 无休止地重新启动。我认为一种可能性是通过提供用户路径而不是登录信息来找到安装用户 Hives 的方法。或者,如果不可能,请尝试保留当前启动窗口的用户密钥/信息。
我不知道是否存在这样的实用程序。我需要使用来自 linux 的 mingw 对其进行编程的帮助(我没有 Visual Studio)。如果不需要安装就好了。我希望它不要使用 .NET 或完整的 windows API,因为我希望看到它在 winre 下工作。我在 linux 下为 C/C++ 编写,但我从未为 Windows 编写过。我唯一的经验是我设法用 winebuilder 构建了 7-Zip。我只知道控制台程序的主要功能称为“main”,Windows程序的主要功能称为“WinMain”。我不熟悉 WINAPI 和 nt API。我只知道没有真正等同于 Unix API 的 chroot() 。
我希望这是可能的,在此先感谢。