gpt4 book ai didi

windows - 当心 Windows 8.1 注册表读取虚拟化不适用于 64 位应用程序

转载 作者:可可西里 更新时间:2023-11-01 11:30:21 25 4
gpt4 key购买 nike

(在尝试 David Heffernan 的建议后更新)

我有一个遗留的 Win32 native 应用程序 (Delphi 6),它将值写入注册表的 HKEY_LOCAL_MACHINE\Software\\键下。这些值稍后会被其他几个旧版 Win32 native 应用程序和一个新的 .NET 应用程序读取。 .NET 应用程序构建 AnyCPU,因此作为 64 位图像执行。因为它使用的是 32 位应用程序编写的配置,所以 .NET 软件将其注册表读取重定向到 Win32 API 应用程序实际写入的 Wow6432Node。

所有应用程序均未提升运行。所有应用程序都是交互式的。用于运行应用程序的帐户对 HKEY_LOCAL_MACHINE\Software\\注册表项及其子项具有明确的“完全控制权”。

据我所知,这并没有使用注册表虚拟化,因为 32 位应用程序对它们写入的 HKLM key 具有写入权限。

这种情况在 64 位 Windows 7 和 64 位 Windows 8 机器上工作得很好,但在新的 Windows 8.1 64 位机器上一切都不起作用。

虽然旧版 Win32 应用程序可以毫无错误地写入注册表,但它现在似乎正在虚拟化。这可以通过查看用户虚拟注册表项来确认;我在那里看到了所有的书面值(value)。

当我用 REGEDIT 查看 HKEY_LOCAL_MACHINE\Software\\键时,我写的大约一半键从 HKEY_LOCAL_MACHINE\Software\\中消失了,但所有都存在于虚拟化文件夹中。

据我所知,对于具有写入权限的 32 位应用程序,应该没有虚拟化,但确实存在。更糟糕的是,当我读取非虚拟化 key 时,我看到了一些但不是所有写入虚拟化存储的值。

为什么它突然虚拟化了写入,为什么当我读取原始 key 时读取不显示所有虚拟化值(即虚拟化读取未按预期工作)?

我认为这一定是一个权限问题,就好像我以“管理员身份”运行应用程序一样, key 都在那里。然而,运行提升不是允许的最终配置。

更新

我清除了这台机器上的所有注册表设置。既在 HKCU 下的虚拟商店中,又在 HKLM 下的共享区域中。然后又开始了,没有跑高架。这导致了类似的症状,但这次我只看到 HKLM key 中的一个 key 。

我打算编写一个 Win32 应用程序来枚举 HKEY_LOCAL_MACHINE\Software\\键,以防我被 regedit.exe 在 64 位操作系统上运行时为我做或不为我做的事情所愚弄,并在我运行时更新从中得到结果。知道它是旧版 32 位 WinAPI 应用程序和新的 64 位应用程序之间的虚拟化不匹配。有关详细信息,请参阅我的答案。

最佳答案

注册表虚拟化在 Windows 8.1 中的工作方式与在 Vista、Win7 和 Win8 中的工作方式相同。没有任何变化可以解释您报告的内容。

您是否知道虚拟化是 7 年前在 Vista 中引入的,以帮助无法修改的应用程序在 UAC 上工作。这个想法是您修复您的应用程序以了解 UAC,并停止运行虚拟化。

关于虚拟化的事情是,如果以标准用户身份运行,您的应用程序将写入虚拟存储。但是,如果您执行提升的应用程序,那么该应用程序将写入注册表的共享部分 HKLM。从您上面的描述来看,您似乎已经提升了应用程序的运行速度,并将值写入 HKLM 而不是虚拟商店。

我建议您清除这台机器上的所有注册表设置。 HKCU 下的虚拟商店和 HKLM 下的共享区域。然后重新开始您的应用程序,而不是提升运行。我相信它会像以前的版本一样工作。

但是,令我惊讶的是您仍在尝试使用虚拟化作为一项功能。它是帮助无助者的拐杖。不要无助。停止运行虚拟化。远离虚拟化。

更新

您的问题编辑完全改变了这一点。事实上,您并不是在询问 Windows 8.1 和更早版本之间的差异。您正在 Windows 8.1 计算机上运行另一个程序,该程序是 64 位的。并且 64 位进程永远不会被虚拟化。

我再次重申我的建议,即不要像您那样使用虚拟化。以这种方式依赖它是愚蠢的。

关于windows - 当心 Windows 8.1 注册表读取虚拟化不适用于 64 位应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com