问题标签 [wow64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2919 浏览

c++ - KEY_WOW64_32KEY 在 32 位和 64 位编译之间给出不同的结果

您好我正在尝试使用 32 位和 64 位编译代码读取和写入注册表值。每个编译都应该读/写到相同的位置。我尝试使用 KEY_WOW64_32KEY 无济于事。

当我使用 32 位目标编译以下代码时,它会写入和读取值。当我使用 64 位目标编译时,它找不到也无法写入密钥。

编辑:以下代码适用于 Windows XP 64 位上的 32 位和 64 位版本。问题出现在 Windows 7 64 位。

任何帮助表示赞赏,罗布。

0 投票
1 回答
2920 浏览

memory - 由于更高的内存消耗,32 位应用程序在 64 位操作系统中崩溃

我有一个 32 位版本的 .net 应用程序在两台不同的机器上运行。一个是 32 位机器,另一个是 64 位机器。

在 64 位环境中,32 位应用程序在 WoW64 环境中运行。

64 位机器配置为 4GB RAM。

但是具有相同工作流程的相同应用程序在 32 位操作系统中消耗 500MB,而在 64 位操作系统中消耗超过 1GB 并崩溃。

我阅读了以下与此相关的文章。

http://blogs.sepago.de/helge/2008/03/11/windows-x64-all-the-same-yet-very-different-part-5

http://blogs.citrix.com/2011/10/13/wow64-memory-mapping-of-32bit-apps-running-on-a-64bit-windows/

但他们的分析不是确定性的。你们中有人遇到过这个问题吗?是否有任何建议让 32 位应用程序在 64 位环境中运行?

0 投票
1 回答
993 浏览

windbg - 创建在 64 位操作系统中运行的 32 位进程的 minidump

我有一个 .net 应用程序,它设计为在 32 位环境中运行,它在 wow64 环境中的 64 位操作系统中运行。

现在我正在创建一个实用程序(32 位)来为应用程序创建转储。

我使用以下代码创建转储。

此 API 调用在 32 位操作系统中执行良好,但在 64 位操作系统中失败。

有人在 64 位操作系统中为 32 位应用程序创建了转储吗?请帮助。

0 投票
2 回答
1461 浏览

winapi - 使用 NtOpenKey 时重定向注册表访问的正确方法是什么?

我正在处理的代码有 32 位和 64 位组件,它们需要在注册表中共享信息。因此,我试图在使用该NtOpenKey函数(用户模式等效于ZwOpenKey)时控制注册表重定向 - 我需要从 64 位代码调用此函数但访问 32 位注册表。(以前的代码只有 32 位,现在它正在升级到 64 位,所以我更喜欢尽可能多地使用现有代码——也就是说,我不想重写所有要使用的代码RegOpenKeyEx。)

自然地,NtOpenKey它不识别KEY_WOW64_32KEY访问标志,这与高级注册表函数不同,因此无法指定重定向。

在这一点上,我能想到的唯一解决方案是Wow6432Node在访问注册表时显式地硬编码键名;就像是:

\Registry\Machine\Software\Wow6432Node\MyCompanyKey\MyKey

不幸的是,这更像是一种黑客行为,微软特别不鼓励这样做。

这个问题有正确的解决方案吗?通读文档没有帮助,我也找不到任何相关的搜索结果。

编辑:只是一点额外的细节:我需要支持 Windows Server 2003 32 位/64 位、Windows 7/8 和 Windows Server 2008 32 位/64 位。(基本上所有从 Windows Server 2003 + Windows 7 及更高版本开始的服务器版本。)

0 投票
1 回答
2268 浏览

c++ - C++ 命令行“WOW64 中不允许操作”

我尝试使用管理员从我的 C++ 程序调用系统程序,但我只收到此消息“在 WOW64 中不允许操作”。我尝试了以下代码:

或者

如果我在命令行中调用,它可以工作

netsh.exe 接口 ipv6 添加 v6v4tunnel IP6Tunnel 192.168.1.2 216.66.84.42

如何从我的 C++ 程序运行系统命令。

为什么我不能在普通命令行中将 C++ System()、CreateProcess() 和 ShellExecute() 与 start 进行比较?

0 投票
1 回答
754 浏览

c++ - 无法在 32 位服务中使用 RegLoadKey 加载 64 位密钥

我需要从 32 位服务中打开和修改用户的注册表项(请注意,当时用户没有登录。)我执行以下操作:

问题是Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify没有加载密钥,即使我知道它存在于实际的用户配置文件中。我可以通过加载用户帐户和使用 64 位 regedit 来验证这一点。

我怀疑这与 Wow64 重定向有关,但我似乎无法理解我做错了什么?

编辑:为第一个 API 添加了错误检查。

0 投票
3 回答
3700 浏览

c++ - 扫描进程内存导致崩溃

我已将我的 DLL 注入进程,我尝试扫描内存以查找与我的值相同的地址,但在我获得第一个地址后它导致崩溃,它应该是 10 个地址

我相信我的保护检查是错误的,但不太确定。

0 投票
1 回答
1110 浏览

windows - Windows 8:对通过 WOW64 运行的 32 位应用程序进行堆分析

首先,这不是关于如何进行堆分析的一般问题,因为我在早期版本的 Windows 中对此非常熟悉。

然而,我想知道的是,是否有人设法对通过 64 位 Windows 8 上的 WOW64 层运行的 32 位应用程序执行堆分析,Windows 8 是这里的关键词?

运行 Windows 7 和 Windows 调试工具对 WOW64 层本身感兴趣)。堆信息完美显示。

在 Windows 8 上,执行相同的过程,添加 gflags 并启动我的进程,启动后的内存使用量从 40 增加到 140MB,表明 gflags 已启动。

但是,无论我如何尝试,WinDbg 或 umdh 都无法获取任何堆信息。既不是使用 x86 版本的旧方式,也不是文档中描述的方式,通过 WOW64 运行时,通过运行 x64 版本并将 .effmach 切换到 32 位上下文。

此外,我已经使用 Windows 7 和 Windows 8 版本的 Windows 调试工具进行了尝试,因此在 Windows 7 上为我提供良好结果的相同工具在 Windows 8 上的行为不同。

我目前的猜测是,Windows 8 管理堆的方式的变化(我在互联网上看到了几篇文章)可能还没有完全更新/反映在 Windows 调试工具中。我会假设(我自己的使用场景仅涉及 WOW64 上下文中的 32 位进程,所以我不确定)当没有 WOW64 层按预期工作时,应用程序的堆分析工作,但 WOW64 当前是阻止程序这里。

我很想知道我是否做错了什么,或者当前的工具是否存在问题。我目前已经退回到在 VM 中运行 Windows 7 来进行内存分析。

那么,有没有人在 Windows 8 中对 WOW64 下的 win32 应用程序进行堆分析取得任何成功,如果是,如何?

0 投票
1 回答
179 浏览

.net - 为什么要从 WOW6432Node 读取值的单元测试(使用 Visual Studio 测试框架开发)?

我创建了基于 Visual Studio 测试框架的单元测试。

但是,它以某种方式从 WOW6432Node 读取注册表项?

我已经用“任何 CPU”平台构建了单元测试框架。

我的操作系统是 64 位的。

我以管理员身份运行 Visual Studio 2010。

我还尝试将构建配置更改为 x64,但现在测试用例无法运行(测试是否在 x64 加载我的框架正在寻找的正确注册表项时强制它)。

我收到 badimageformat 异常。

我观察到的唯一一件事是 - “警告 CS1607:程序集生成 - 引用的程序集 'mscorlib.dll' 针对不同的处理器”。

但是其他引用“system.dll - mscorlib.dll”的项目在使用 x64 conf 构建时不会发出此警告。

问候,梦想家

0 投票
1 回答
6822 浏览

c# - C# 将注册表项添加到 LocalMachine 失败

我正在尝试LocalMachine在注册表中添加一个键。我正在使用这段代码:

我确实在管理员帐户上运行它。我事件以“以管理员身份运行”运行它,但没有任何内容添加到注册表中:(。当我更改LocalMachine为时CurrentUser,实际上它已添加到CurrentUser键中。但是如何强制将其添加到 LocalMachine?