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

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

适用于:Windows 10 - 所有版本,Windows Server 2012 R2
原始 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 Store 版本的计算机在注册表中的新分支中设置 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 Office 时,Winword.exe 注册以处理 32 位注册表视图中 .doc 文件。 注册表反射器将此信息复制到 64 位注册表部分。 因此,32 位和 64 位程序都针对 .doc 文件启动 32 位版本的 Winword.exe。
  • 安装 64 位版本的 Microsoft Office 时,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 版本计算机。
  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 获取技术支持。