基于 x64 版本的 Windows 中的注册表更改

本文介绍在基于 x64 的 windows Server 2003 Microsoft 和 Microsoft Windows XP Professional x64 版本中进行的一些注册表更改。 它介绍了 Windows x64 版本操作系统如何存储 32 位程序和 64 位程序的注册表信息。

原始 KB 数: 896459

总结

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击以下文章编号以查看Microsoft知识库中的文章: 322756 如何在 Windows 中备份和还原注册表

运行基于 x64 版本的 Microsoft Windows Server 2003 或 Microsoft Windows XP Professional x64 Edition 的计算机使用不同的注册表布局来处理 32 位和 64 位程序。 Windows 操作系统的 x64 版本版本的注册表布局更改可确保不会覆盖程序硬编码.dll路径、程序设置和其他参数值。

为了防止 32 位注册表设置覆盖 64 位注册表设置,运行基于 x64 版本的计算机Microsoft将 32 位程序的设置存储在注册表的新分支中。 用户在程序安装过程中不会注意到任何更改。 注册表重定向过程使程序安装和程序配置设置可以访问正确的注册表子项,而无需用户干预。

在基于 x64 的 Windows 版本上运行的 32 位程序和 64 位程序在不同模式下运行,并在注册表中使用以下部分:

  • 本机模式 64 位程序在本机模式下运行,访问存储在以下注册表子项中的键和值:

    HKEY_LOCAL_MACHINE\Software

  • 32 位程序在 WOW64 模式下运行,访问存储在以下注册表子项中的键和值:

    HKEY_LOCAL_MACHINE\Software\WOW6432node

注册表重定向

为了支持 32 位和 64 位 COM 注册和程序状态的共存,WOW64 子系统使用注册表的另一个视图提供 32 位程序。 WOW64 子系统使用注册表重定向来截获位级别的注册表调用。 注册表重定向还确保注册表调用定向到注册表中的正确分支。

在安装新程序或在 Windows x64 版本计算机上运行程序时,64 位程序发出的注册表调用将访问 HKEY_LOCAL_MACHINE\Software 注册表子项而不重定向。 WOW64 截获 32 位程序对其发出的注册表调用 HKEY_LOCAL_MACHINE\Software ,然后将其重定向到 HKEY_LOCAL_MACHINE\Software\WOW6432node 子项。 通过仅重定向 32 位程序调用,WOW64 可确保程序始终写入相应的注册表子项。 注册表重定向不需要修改程序代码,并且此过程对用户是透明的。

重定向中包含的注册表子项

以下注册表子项在 Windows x64 版本操作系统的当前版本中重定向:

  • HKEY_LOCAL_MACHINE\Software\Classes
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc
  • HKEY_LOCAL_MACHINE\Software\Microsoft\COM3
  • HKEY_LOCAL_MACHINE\Software\Microsoft\EventSystem

重要

在更高版本的操作系统版本中,注册表项重定向可能会更改。 鼓励软件开发人员避免编写基于以前记录的重定向密钥列表的程序代码。 相反,应编写代码以在调用注册表的 32 位或 64 位逻辑视图之前验证重定向状态。

注册表反射

注册表反射提供了一种实时方法,用于随时保存注册表打开的 32 位和 64 位部分。 例如,考虑名为Hello.exe的 32 位程序,该程序充当 32 位 OLE 服务器,但也可以为来自 64 位客户端的请求提供服务。 注册表反射使Hello.exe程序能够同时保留 32 位注册表和 64 位注册表,以处理 32 位和 64 位程序调用。

反射使同一注册表存在两个物理副本,以支持同时执行本机和 WOW64 操作。 反映的大多数键都是类键。 类键是用“最后一个写入者获胜”的理念编写的,当写入和关闭 32 位或 64 位类键时,密钥的句柄将关闭。

以下列表包含“最后一个编写者获胜”哲学的一些示例:

  • 执行 Windows x64 版本操作系统的干净安装后,将注册 64 位版本的 Wordpad.exe 来处理.doc文件。 注册表反射器将.doc注册从 64 位注册表部分复制到 32 位注册表部分。
  • 安装 32 位版本的Microsoft 办公室时,Winword.exe注册以在 32 位注册表视图中处理.doc文件。 注册表反射器将此信息复制到 64 位注册表部分。 因此,32 位和 64 位程序都为.doc文件启动 32 位版本的 Winword.exe。
  • 安装 64 位版本的 Microsoft 办公室 时,64 位版本的Winword.exe会在 64 位注册表部分中注册,以处理.doc文件。 注册表反射器还会将此信息复制到 32 位注册表部分中,因此 32 位和 64 位程序都为.doc文件启动 64 位版本的 Winword.exe。

注意

开发人员可以使用 RegQueryReflectionKey 函数来确定特定键的反射状态,并使用 RegDisableReflectionKey 函数和 RegEnableReflectionKey 函数以编程方式禁用和启用特定键的注册表反射。

共享注册表项

某些注册表子项包含仅存在于注册表的一个副本中的常量信息,即使这些键同时出现在 32 位和 64 位注册表视图中。 这称为注册表反射。

在 Windows x64 版本操作系统的当前版本中,以下注册表子项在 32 位和 64 位程序中共享,并且不会基于程序或进程的 32 位或 64 位级别重写:

  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\SYSTEMCERTIFICATES
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\CRYPTOGRAPHY\SERVICES
  • HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\HCP
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\ENTERPRISECERTIFICATES
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSMQ
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\NETWORKCARDS
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\PROFILELIST
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\PERFLIB
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\PRINT
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\PORTS
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\CONTROL PANEL\CURSORS\SCHEMES
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\TELEPHONY\LOCATIONS
  • HKEY_LOCAL_MACHINE\SOFTWARE\POLICIES
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\GROUP POLICY
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\SETUP\OC MANAGER
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\SOFTWARE\MICROSOFT\SHARED TOOLS\MSINFO
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\SETUP
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\CTF\TIP
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\CTF\SYSTEMSHARED
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\FONTS
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\FONTSUBSTITUTES
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\FONTDPI
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\FONTMAPPER
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\RAS
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\DRIVER SIGNING
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\NON-DRIVER SIGNING
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\CRYPTOGRAPHY\CALAIS\CURRENT
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\CRYPTOGRAPHY\CALAIS\READERS
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\TIME ZONE
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\TRANSACTION SERVER
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\DFS
  • HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\TERMSERVLICENSING

重要

在更高版本的操作系统版本中,注册表项反射可能会更改。 鼓励软件开发人员避免编写基于以前记录的反映密钥列表的程序代码。 相反,应在程序调用注册表的 32 位或 64 位逻辑视图之前编写代码来验证反射状态。

注册表编辑器更改

32 位和 64 位版本的注册表编辑器均包含在 x64 Edition 操作系统中。 若要更好地了解 Windows x64 版本计算机上的注册表的 64 位和 32 位程序部分,请使用以下方法之一。

启动 64 位版本的注册表编辑器

  1. 使用具有管理权限的帐户登录到 Windows x64 Edition 计算机。
  2. 依次单击“开始”、“运行”,在“打开”框中键入“regedit”,然后单击“确定”
  3. 在注册表编辑器中,找到并检查以下注册表子项: HKEY_LOCAL_MACHINE\Software\WOW6432node

启动 32 位版本的注册表编辑器

单击“开始”,单击“运行,在“打开”框中键入安装了 Windows x64 Edition\Windows\syswow64\regedit.exe m 的驱动器号,然后单击“确定”。 使用 m 开关可以运行注册表编辑器的多个实例。

注意

登录到 Microsoft Windows Server 2003 Service Pack 1(SP1)或更高版本的计算机或基于 Windows x64 版本的计算机,并且使用远程桌面协议(RDP)连接到另一台基于 Windows Server 2003 SP1 或更高版本的计算机或基于 Windows x64 版本的计算机时,可以查看远程计算机上的注册表的 64 位部分。 但是,当你登录到尚未升级到 SP1 或任何其他 32 位 Windows 操作系统 Microsoft的 Windows Server 2003 计算机时,只能查看远程计算机上的注册表的 32 位部分。

对基于 x64 的 Windows 版本的技术支持

如果你的硬件已安装 Windows x64 版本,你的硬件制造商将为 Windows x64 版本提供技术支持和帮助。 在这种情况下,硬件制造商会提供支持,因为硬件已随附 Windows x64 版本。 硬件制造商可能使用单独组件自定义了 Windows x64 版本的安装。 单独组件可能包括特定设备驱动程序,也可以包括可选设置以最大限度提高硬件性能。 如果必须具有 Windows x64 版本的技术帮助,Microsoft将提供合理的努力帮助。 但是,你可能需要直接与制造商联系。 制造商最有资格为他们在硬件上安装的软件提供支持。 如果你单独购买了 Windows x64 版本(如 Windows Server 2003 x64 版本),请联系Microsoft获取技术支持。