问题标签 [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.
c++ - KEY_WOW64_32KEY 在 32 位和 64 位编译之间给出不同的结果
您好我正在尝试使用 32 位和 64 位编译代码读取和写入注册表值。每个编译都应该读/写到相同的位置。我尝试使用 KEY_WOW64_32KEY 无济于事。
当我使用 32 位目标编译以下代码时,它会写入和读取值。当我使用 64 位目标编译时,它找不到也无法写入密钥。
编辑:以下代码适用于 Windows XP 64 位上的 32 位和 64 位版本。问题出现在 Windows 7 64 位。
任何帮助表示赞赏,罗布。
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 位环境中运行?
windbg - 创建在 64 位操作系统中运行的 32 位进程的 minidump
我有一个 .net 应用程序,它设计为在 32 位环境中运行,它在 wow64 环境中的 64 位操作系统中运行。
现在我正在创建一个实用程序(32 位)来为应用程序创建转储。
我使用以下代码创建转储。
此 API 调用在 32 位操作系统中执行良好,但在 64 位操作系统中失败。
有人在 64 位操作系统中为 32 位应用程序创建了转储吗?请帮助。
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 及更高版本开始的服务器版本。)
c++ - C++ 命令行“WOW64 中不允许操作”
我尝试使用管理员从我的 C++ 程序调用系统程序,但我只收到此消息“在 WOW64 中不允许操作”。我尝试了以下代码:
或者
和
如果我在命令行中调用,它可以工作
netsh.exe 接口 ipv6 添加 v6v4tunnel IP6Tunnel 192.168.1.2 216.66.84.42
如何从我的 C++ 程序运行系统命令。
为什么我不能在普通命令行中将 C++ System()、CreateProcess() 和 ShellExecute() 与 start 进行比较?
c++ - 无法在 32 位服务中使用 RegLoadKey 加载 64 位密钥
我需要从 32 位服务中打开和修改用户的注册表项(请注意,当时用户没有登录。)我执行以下操作:
问题是Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
没有加载密钥,即使我知道它存在于实际的用户配置文件中。我可以通过加载用户帐户和使用 64 位 regedit 来验证这一点。
我怀疑这与 Wow64 重定向有关,但我似乎无法理解我做错了什么?
编辑:为第一个 API 添加了错误检查。
c++ - 扫描进程内存导致崩溃
我已将我的 DLL 注入进程,我尝试扫描内存以查找与我的值相同的地址,但在我获得第一个地址后它导致崩溃,它应该是 10 个地址
我相信我的保护检查是错误的,但不太确定。
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 应用程序进行堆分析取得任何成功,如果是,如何?
.net - 为什么要从 WOW6432Node 读取值的单元测试(使用 Visual Studio 测试框架开发)?
我创建了基于 Visual Studio 测试框架的单元测试。
但是,它以某种方式从 WOW6432Node 读取注册表项?
我已经用“任何 CPU”平台构建了单元测试框架。
我的操作系统是 64 位的。
我以管理员身份运行 Visual Studio 2010。
我还尝试将构建配置更改为 x64,但现在测试用例无法运行(测试是否在 x64 加载我的框架正在寻找的正确注册表项时强制它)。
我收到 badimageformat 异常。
我观察到的唯一一件事是 - “警告 CS1607:程序集生成 - 引用的程序集 'mscorlib.dll' 针对不同的处理器”。
但是其他引用“system.dll - mscorlib.dll”的项目在使用 x64 conf 构建时不会发出此警告。
问候,梦想家
c# - C# 将注册表项添加到 LocalMachine 失败
我正在尝试LocalMachine
在注册表中添加一个键。我正在使用这段代码:
我确实在管理员帐户上运行它。我事件以“以管理员身份运行”运行它,但没有任何内容添加到注册表中:(。当我更改LocalMachine
为时CurrentUser
,实际上它已添加到CurrentUser
键中。但是如何强制将其添加到 LocalMachine?