写合规基线规则会遇到注册表匹配不上的问题,这里就涉及到了注册表重定向。
重定向技术😊
重定向技术适用版本:
Windows XP X64、Windows Server 2003 X64及以后的X64版本。
重定向技术产生原因:为了确保32位程序能够顺利运行
为了将32位程序和64位程序分离开,产生了一种模拟器(WOW64,Windows 32 on Windows 64),WOW64 模拟器让我们可以在64位平台上运行32位程序,它在系统层中另外提供了一层,来支持老式的32位程序。
一:重定向-文件重定向
ps: 这种文件重定向对于每个32位应用程序默认打开的,但是也可以通过调用API关闭
文件重定向原因:为了确保32位程序能够顺利运行
windows对32位应用程序和64位应用程序有分开存放机制:
对于64位,文件通常被放在%windir%\system32 和 %ProgramFiles%
————-> C:\Windows\system32 和 C:\program files。
对于32位,文件通常被放在%windir%\syswow64 和 %ProgramFiles(x86)
————-> C:\Windows\syswow64 和 C:\program files (x86)。
system32目录下都是64位的dll,只能支持64位程序使用,32位程序不能使用。而syswow64目录下都是32位的dll,可以支持32位程序使用。
文件重定向产生场景:
32位程序访问%windir%\system32 或者 %ProgramFiles% 时候,会发生文件重定向。
文件重定向具体指向:
%windir%\system32 到 %windir%\syswow64的重定向。
%ProgramFiles% 到 C:\Program Files (x86)
文件重定向具体含义:
32位应用程序去访问%windir%\system32,系统会自动跳转到%windir%\syswow64目录下面,syswow64目录下都是32位程序的dll,才能够让32位程序顺利加载【system32目录下面的64位dll不能让32位程序使用】。
二:重定向-注册表重定向
64位Windows的注册表分为 32 位注册表项和 64 位注册表项,许多 32 位注册表项与其相应的 64 位注册表项同名。
64 位版本的注册表编辑器中,32 位注册表项显示在 HKEY_LOCAL_MACHINE\Software\WOW6432Node
注册表项下。
打开64位注册表【运行->regedit】
打开32位注册表【运行->%systemroot%\syswow64\regedit】
注册表重定向产生原因:防止注册表键冲突
注册表重定向实质:维护两套不同的注册表键【64位和32位】
ps:
注册表反射:【适用版本:windows xp、windows server2003等,从win7和winserver 2008 r2开始WOW64就不使用反射机制了,以前通过反射改的key都改为共享了】 维护两套不同的注册表重定向很多是通过:注册表反射机制完成的,但是不是所有的键值都会受到反射机制影响。
注册表反射是在64 位注册表视图和 32 位注册表视图之间复制某些特定的注册表项和项值。
注册表分类:
1:专门给64位程序访问 【除了32位的都是】
2:专门给32位程序访问 【HKEY_LOCAL_MACHINE\Software\WOW6432Node 路径下的】
注册表重定向具体举例:
应用程序操作注册表的时候32bit方式和64bit方式。运行于64bit系统下的32bit应用程序默认操作32位注册表项(即被重定向到WOW6432Node下的子项);而64bit应用程序才是操作的直观子项。
比如,同在64bit系统下,使用如下代码访问注册表:
::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T(“Software\Sobey\MPC “), 0,KEY_ALL_ACCESS, &hKey)
如果应用程序为32位子系统,那么实际访问的注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC;
而如果应用程序为64位子系统,那么实际访问的注册表位置将会是:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC。
下面这个可以看到注册表具体项是哪个是反射、重定向还是共享,非常有用。
参考链接: