win64位系统注册表

不同

64位系统注册表结构和32位系统注册表结构略有不同。

比如:

32位  HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\

64位 HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\

路径被映射到wow6432node下,如果恰巧32位同路径下值相同,就可以顺利取到值。

 

Windows 64位系统中的注册表

64 位Windows系统中的注册表分为 32 位注册表项和 64 位注册表项。

64 位Windows系统中注册表编辑器也有两个版本64和32位版本。

许多程序的32 位注册表项与其相应的 64 位注册表项同名。
在64位系统的注册表编辑器中,32 位注册表项显示在以下注册表项下:

HKEY_LOCAL_MACHINE\Software\WOW6432Node

两个注册表编辑器

使用默认的 64 位版本注册表编辑器  :

 %systemroot%\Syswow64\regedt.exe,可以查看编辑 64 位和 32 位的注册表项和项值。要查看或编辑 64 位注册表项,必须使用 64 位版本的注册表编辑器 (Regedit.exe)。

使用32 位版本注册表编辑器 :

%systemroot%\Syswow64\regedt32.exe 可以查看编辑 32 位注册表项和项值。在 32 位版本注册表编辑器中执行任务的方式与 64 位版本注册表编辑器没有区别。

Windows64位系统 拥有 一个默认的 64 位版本的注册表编辑器 (Regedit.exe),它 可以显示 64 位和 32 位的注册表项。

为兼容32位应用程序,Windows64位系统 下的WOW64 注册表重定向器,为 32 位应用程序提供了对应于 32 位应用程序的注册表项。

在 64 位版本的注册表编辑器regedt.exe中,32 位注册表项显示在以下注册表项下:HKEY_LOCAL_MACHINE\Software\WOW6432Node

 

打开 32 位版本的注册表编辑器

要打开 32 位版本的注册表编辑器,请按照下列步骤操作:

单击“开始”,然后单击“运行”。在“打开”框中,键入 %systemroot%\syswow64\regedit,然后单击“确定”。

注意:除非使用 -m 开关启动注册表编辑器的第二个实例,否则,必须先关闭 64 位版本的注册表编辑器,然后才能打开 32 位版本的注册表编辑器。

例如,如果 64 位版本的注册表编辑器已经在运行,在第 2 步键入 %systemroot%\syswow64\regedit -m  方可启动 32 位版本的注册表编辑器。

WOW64的作用

WoW(Windows on Windows)模式 WOW64 是 Windows-32-on-Windows-64

32 位应用程序,会看到与真正的 64 位HKEY_LOCAL_MACHINE\Software树完全分开的 ,32位HKEY_LOCAL_MACHINE\Software树(HKEY_LOCAL_MACHINE\Software\WOW6432Node)。

这样32位程序依旧可以使用HKEY_CLASSES_ROOT,

因为此树的每个计算机部分驻留在以下注册表项内:HKEY_LOCAL_MACHINE\Software为了通过 COM 和其他机制实现 64 位/32 位程序互操作性。

为了支持 32 位和 64 位 COM 注册和程序状态的共存,WOW64 使用了“注册表反射器”来在 64 位注册表视图和 32 位注册表视图之间镜像某些注册表项和项值。该反射器是“智能”的,因为它只反射 COM 激活数据。反射的注册表项WOW64 注册表反射器可能会在反射过程中修改注册表项的内容和项值,目的是为了调整路径名等。因此,32 位的内容与 64 位的内容可能会有所不同。下面的注册表项会影射:

HKEY_LOCAL_MACHINE\Software\Classes

HKEY_LOCAL_MACHINE\Software\COM3

HKEY_LOCAL_MACHINE\Software\Ole

HKEY_LOCAL_MACHINE\Software\EventSystem

HKEY_LOCAL_MACHINE\Software\RPC

 

代码操作

在 x64 系统上,使用RegOpenKeyEx 函数返回值 2,意思是 找不到路径,解决办法:

32bit 应用程序调用RegOpenKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft", 0, KEY_WOW64_64KEY | KEY_READ, &hKey );

注意 KEY_WOW64_64KEY 权限值必须使用否则将查找不到指定的路径。

 

64位操作系统下,编写32位应用程序,去读取64位应用程序的注册表路径,要在RegOpenKeyEx时加上KEY_WOW64_64KEY参数。

RegOpenKeyEx(HKEY_LOCAL_MACHINE,

"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",

0,

KEY_QUERY_VALUE|KEY_WOW64_64KEY,

&hkey)

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页