问题标签 [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.
python - Windows x64 上的 Python 2.* x86 (ie32bit) id() 函数可以返回的最大数字是多少?
Python 2.6 的 x86id()
函数可以返回的最大数字是多少?
我认为上限必须是任何 32 位应用程序可以看到的内存量,它必须是:2 32,即 4294967296?
(这很好,因为我必须将此值拟合到 C# 类型中,UInt32
或者符合 CLSInt64
就足够了,这是我担心的原因,尽管与问题无关。)
但是,如果我在具有超过 2GB 内存的 Windows x64 上运行,比如 32GB 内存——id()
即使 Python 解释器本身是 x86,Python 的函数是否有可能返回高于 2 32的值?
我猜它归结为 Python 解释器对机器的看法——我想 WoW64 将 64 位内存地址转换为 32 位地址——但我只是在猜测——我需要确定!
winapi - SetWindowsHookEx 从 32 位阻止 64 位 WM_HOTKEY
我们的应用程序需要在 Windows 上以“安全信息亭模式”运行。我们有多种方式阻止各种行为。我们要做的一件事是使用 SetWindowsHookEx 来监听热键的使用以注册 WH_GETMESSAGE 挂钩,然后当 WM_HOTKEY 消息通过时,我们将其更改为 WM_NULL(参见下面的代码)。这在大多数情况下都很有效,但我们最近发现了一个问题。在 64 位机器上,如果监听和响应热键的应用程序是 64 位应用程序,我们不能用 32 位应用程序阻止它。
我们正在努力寻找解决这个问题的方法,我能想到的唯一选择是生成一个后台 64 位进程来处理 64 位应用程序的这个钩子。还有其他(更简单的)替代方案吗?
设置钩子:
GetMsgProc:
memory-management - 了解在 WoW64 下如何管理内存
我们有六个 Web 应用程序需要作为 32 位进程运行,但由于我们正在缓存的各种东西需要相当多的内存,由于各种原因,这不容易改变。没有一个应用程序需要超过 2GB,但合并的内存使用量将超过此。由于各种原因也不容易更改,我们计划在一对具有 16GB RAM 的 64 位服务器上运行所有这些,这对于所有 Web 应用程序组合内存需求来说是足够的内存。
这是我的担心。我知道 Windows 为每个进程分配一个虚拟地址空间,Win32 上 2GB 用户空间和 2GB 内核空间,Win64 上 8TB 用户空间和 8TB 内核空间(在大多数情况下)。然后操作系统会处理该地址空间的哪些部分映射到物理 RAM。我也知道 WoW64 子系统将处理在 64 位操作系统上运行 32 位进程。我对 WoW64 的理解不够深入,不知道它是如何做到的,我希望它能够映射不同 32 位进程的虚拟地址空间以利用所有可用的 RAM,但我担心它可能不会这样做并且该进程仍将竞争已以某种方式“耳朵标记”的同一组 RAM 以进行 32 位进程仿真。
我知道真正的解决方案是测试我们的目标环境和配置文件以查看发生了什么,但是更多关于在 WoW64 下如何管理物理 RAM 的信息会让人放心。
windows - WOW64 SetLayeredWindowAttributes LWA_ALPHA
我使用如下代码将对话框显示为分层窗口:
...并且一切都在 32 位 Windows 上运行良好。然而,在 WOW64 中,这会导致每个像素要么显示为黑色,要么根本不显示(零透明度),具体取决于我们使用的 PC。
我们有四台 64 位 Windows 测试机,两台 NVidia 和两台 Intel 视频硬件,都运行 Win7,我们尝试了每个供应商的最新视频驱动程序以及 Win7 处理的自动更新(无论如何可能是相同的驱动程序.. .)
不幸的是,其中一个(NVidia)实际上确实按预期显示了透明像素,这使问题变得混乱,这让我怀疑这确实是WOW64而不是视频驱动程序的问题,但到目前为止,每台显示这些的机器症状是64位。
如果有任何不同,对话框将显示在由 MCI 命令控制的全屏窗口播放视频上。我还在使用带有 LWA_COLORKEY 选项的 SetLayeredWindowAttributes 来显示此视频上显示的另一个对话框,但该对话框没有问题。
有任何想法吗...?
java - Java 的摘要与外部实用程序的不同结果
我编写了一个简单的 Java 类来生成 Windows Calculator 文件的哈希值。我正在使用Windows 7 Professional with SP1
. 我试过Java 6.0.29
和Java 7.0.03
. 有人能告诉我为什么我从 Java 和(很多!)外部实用程序和/或网站获得不同的哈希值吗?外部的一切都相互匹配,只有 Java 返回不同的结果。
.net - 无法绕过注册表虚拟化
我在注册表中创建了一个子项,HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
. 当我使用 Visual Studio 的即时窗口加载此子项而没有运行已启动的应用程序时,我可以读取该子项。
但是,当我的应用程序查找 时HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
,它找不到它。它甚至找不到HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
。好像有不一样的
但是,当我在调试模式下运行应用程序并暂停时,找不到完全相同的代码,HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
更不用说HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
.
经过一番挖掘,看起来我已经成为注册表虚拟化的受害者。所以我添加了一个清单,使应用程序需要管理员权限(UAC 对话框),但注册表虚拟化仍在发生。微软关于此事的文档声称情况不应该如此。帮助!
java - Windows 2003 与 Windows 2008 中的 Java Web 应用程序性能
我有一个在 Tomcat 上运行的 Java Web / SIP 应用程序。该应用程序的大小可在 Windows 2003 上运行,在虚拟化环境中使用 4 GB RAM 和 4 个 vCPU 进行 1000 个并发会话。
现在应用程序迁移到 Windows 2008,Tomcat 仍然是 32 位,应用程序是用 32 位 Java 编译的,32 位应用程序也是如此。有了这个设置,我的 2008 年性能。测试的工作方式与在 Windows 2003 上的工作方式不同。CPU 利用率达到峰值,许多呼叫被丢弃。
我在这里有以下问题。
在 64 位环境中运行 32 位应用程序是否需要额外的 CPU / 内存,这会在此处产生问题。
Win 2003 和 Win 2008 之间是否存在性能差异。
与 2003 相比,Windows 2008 是否因为 64 位环境需要更多 CPU。
windows - 在 WOW64 中捕获 HANDLE 创建
我正在尝试解决第三方二进制文件(无源)启动缓慢的问题。它是在 64 位 Windows 7 上运行的 32 位应用程序。
我使用调试器闯入应用程序,而它在启动期间以 0% 的 CPU 使用率挂起,并且似乎正在等待ReadFile
返回。第一个参数ReadFile
是句柄值,000000f0。windbg 的!handle
命令告诉我:
我想知道这对应的是什么设备。但 Sysinternals Process Explorer 并未将此句柄包含在其进程句柄列表中。
我使用 windbg 跟踪所有调用ntdll!NtCreateFile
并打印路径和返回的句柄:这个句柄不在其中。kernel32!CreateNamedPipeW
,kernel32!CallNamedPipeW
和上的断点kernel32!WaitNamedPipeW
永远不会被触发(这很奇怪,因为 Process Explorer 确实显示了另一个带有 path 的句柄\Device\NamedPipe\
)。
作为参考,这里是在 Windows x64 上跟踪NtCreateFile
(akak ) 的命令:ZwCreateFile
类型的 HANDLE 还能File
从哪里来?其他 HANDLE 创建函数不委托给NtCreateFile
实际的系统调用(我猜不是)吗?
asp.net - 与 32 位相比,64 位 ASP.NET 4.0 工作进程消耗 5 倍以上的内存
我已将一个 ASP.NET v4.0 应用程序迁移到在 Win2008 Server x64 操作系统下运行的新服务器。由于当应用程序池设置为“启用 32 位应用程序”= False(在 x64 IIS 上应该是默认设置)时,迁移的 asp.net 应用程序似乎没有问题,所以我让它在 64 位模式下运行。
事实证明,用户会话经常被中断,因为工作进程很快就超过了它的虚拟内存限制。由于这个原因,我只用一个修改设置测试了相同的应用程序和相同的应用程序池——我将“启用 32 位应用程序”切换为 True,让它在“WOW64”模式下运行;其他一切都保持原样。我使用完全相同的用户工作场景比较了两种模式下工作进程消耗的内存量,结果让我有点震惊:
- 工作量消耗大约。在 WOW64 32 位模式下运行时为 150MB
- 在“默认”64 位工作进程模式下,相同的工作负载消耗大约 800MB。
我预计在 64 位模式下工作进程可能会消耗更多内存,但这种差异太大了。
如此巨大的内存影响被认为是正常的吗?是否有可能以某种方式减少/修复它?