用于在脱机Windows安装上运行程序的Chroot等效实用程序

时间:2013-08-08 13:17:51

标签: windows winapi utility chroot

Chroot经常被认为是一种沙盒。但在Unix中,它还允许在某些不可引导的安装上使用程序。 当我搜索chroot for windows时:我看到像沙盒这样的东西。我不想要安全,我想要一种方法来拯救系统。例如,如果我使用ntpasswd禁用syskey,则使用此类实用程序运行C:\ windows \ system32 \ syskey.exe将修改脱机安装的注册表项,而不是当前的注册表项。 它可以被称为runon,类似于替代用户的runas。

这里的chroot意味着什么?嗯,有winre允许你的Windows安装相同的驱动器号。有一个例子:winre安装中不存在compact.exe。如果你cd到\%Windir%\ system32(离线安装的目录)并运行压缩,它将无法工作(除非你使用/?)。如果你运行

X:\sources\>path C:\Windows\System32\

您现在可以使用离线窗口中显示的文件。诸如ntdll.dll或最终gdi.dll之类的基本dll是来自C:\ Windows \ System32而不是X:\%windir%\ system32,并且运行压缩将起作用。

但以这种方式运行的程序将使用当前的注册表。主要密钥(HKLM; HKCC; HKCR; HKCU; HKU; HKEY_PERFORMANCE_DATA)及其内容是当前winre / pe安装的主要密钥,而不是您在Windows中启动时的密钥。因此,如果程序想要修改某些注册表项,它将修改X:\ windows \ system32 \ config的Hives而不是位于C:\ systemdrive中的Hives。

可以在HKLM下安装离线窗口的Hives并编辑它们,但是在HKLM \ Software中有其信息的程序仍然会查看HKLM \ Software而不是您安装它的名称。

我正在寻找的实用程序(部分?)隐藏了winpe / re的注册表,转而支持离线安装中存在的注册表。预期的效果是,如果使用该实用程序启动注册表编辑器,您将看到这些键,就好像您已启动到Windows中一样。 (也许有一些例外?)

应用程序仍将使用当前窗口的Microsoft服务。我想启动安装在当前未安装的脱机窗口上的服务。即使对于内核,这样做也会很好。通过这种方式,在unix中启动sysv守护程序时,您将具有相同的行为。除了这里,一些避免双实例的机制可能是必要的,因为问题在Windows上会更加重要

用户访问权限是Microsoft系统中的重要部分。可能需要在命令行的参数中指定用户名和密码。用户数据库配置错误会导致出现问题并阻止Windows启动。如果想再次启用syskey,则需要具有无法使用的身份验证信息。但在某些情况下,比如syskey问题,它会让窗口无休止地重启。我认为一种可能性是通过提供路径而不是登录信息来找到挂载用户Hives的方法。或者如果不可能,请尝试保留当前引导窗口的用户键/信息。

我不知道是否存在这样的实用程序。我想帮助用mingw从linux编程(我不能拥有Visual Studio)。如果不需要安装它会很好。我希望它不使用.NET或完整的Windows API,因为我希望看到它在winre下工作。我在linux下编写C / C ++,但我从来没有为windows做过。我唯一的经验是我设法用winebuilder建立7-Zip。我只知道主要功能在控制台程序中称为“main”,对于windows程序称为“WinMain”。我不熟悉WINAPI也不熟悉API。我只知道没有真正等同于Unix API的chroot()。

我希望这是可能的,提前谢谢。

1 个答案:

答案 0 :(得分:2)

经过一些审查后,答案是否定的。你不能这样做。各种系统DLL中对HKEY_LOCAL_MACHINE的嵌入引用太多;在最好的情况下,你最终会得到一个非常错误的系统(因为系统的不同部分会看到不同的机器配置视图。)