• Windows重定向技术【文件重定向与注册表重定向】


    重定向技术

    重定向技术适用版本:

    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。

    这个网址可以看到注册表具体项是哪个是反射、重定向还是共享,非常有用。

    WOW 下的重定向、共享和反射项在这里插入图片描述

    参考链接:
    64位视图注册表

    Windows:32位程序运行在64位系统上注册表会重定向

    jiangqin115 - 注册表重定向

    mmthr - 32位程序访问64位 system32文件夹时注意事项

    Crzayliyang-架构Young,64位Windows系统注册表的 32 位注册表项和64 位注册表项

  • 相关阅读:
    Angular 应用开发里使用 ForRoot 解决 Lazy Loaded Module 里单例行为丢失的问题
    黑苹果系统安装常见问题汇集
    数字员工:提效利器,用好数字化技术工具,年节省成本超百万
    ToBeWritten之威胁狩猎环境应用
    Spring Cloud开发实践(六): 基于Consul和Spring Cloud 2021.0的演示项目
    QT 自定义信号
    java集合图谱
    修改CMD默认路径
    DAST 黑盒漏洞扫描器 第四篇:扫描性能
    C++动态规划算法简析
  • 原文地址:https://blog.csdn.net/weixin_43605586/article/details/125878233