WOW64:文件和注册表的重定向

原文:

注册表重定向    http://blog.csdn.net/is2120/article/details/7246334

 

 

32位程序读取64位注册表   http://bbs.eyuyan.com/read.php?tid=261750

 

 

注册表重定向解决办法:

 

32位程序如何访问64位的注册表(HKLM/Software)

Ø         在调用函数RegCreateKeyEx创建注册表项时,对其第六个参数REGSAM  samDesired设置中添加参数KEY_WOW64_64KEY,这样可以实现对64位注册表的访问;

Ø         在调用函数RegOpenKeyEx打开注册表项时,要对其第四个参数REGSAM  samDesired设置中添加参数KEY_WOW64_64KEY,这样可以实现对64位注册表的访问;

 

64位程序如何访问32位的注册表(HKLM/Software/Wow6432Node)

Ø         在调用函数RegCreateKeyEx创建注册表项时,对其第六个参数REGSAM  samDesired设置中添加参数KEY_WOW32_64KEY,这样可以实现对32位注册表的访问;

Ø         在调用函数RegOpenKeyEx打开注册表项时,要对其第四个参数REGSAM  samDesired设置中添加参数KEY_WOW32_64KEY,这样可以实现对32位注册表的访问;

 

 

 

文件重定向解决办法:

 

我们可以调用相关的API来关闭和打开这种转向。常用的函数有3个,Wow64DisableWow64FsRedirection(关闭系统转向),Wow64RevertWow64FsRedirection(打开系统转向),Wow64EnableWow64FsRedirection(打 开系统转向)。但是Wow64EnableWow64FsRedirection在嵌套使用的时候不可靠,所以通常用上面的 Wow64RevertWow64FsRedirection来打开文件系统转向功能。

 

下面简单讲讲为何会发生注册表和文件重定向:

____________________________________________________________

_____________________________________________________________

 

 

 

 

对于64位应用程序,其 文件通常被放在%windir%\system32和%programfiles%(比如:c:\program files)。对于32位应用程序,其文件通常在%windir%\syswow64和C:\program files (x86)下面。如果我们用32位程序去访问%windir%\system32,不管我们用硬编码还是其它的方式,系统都会自动地给我们转向 到%windir%\syswow64下面。这种转向对于每个32位应用程序默认都是打开的。但是这种转向对于我们来说并不总是需要的。那么我们可以调用相关的API来关闭和打开这种转向。常用的函数有3个,Wow64DisableWow64FsRedirection(关闭系统转向),Wow64RevertWow64FsRedirection(打开系统转向),Wow64EnableWow64FsRedirection(打 开系统转向)。但是Wow64EnableWow64FsRedirection在嵌套使用的时候不可靠,所以通常用上面的 Wow64RevertWow64FsRedirection来打开文件系统转向功能。


        为了防止注册表键冲突,注册表在某些键也分成了两个部分。一部分是专门给64位系统访问的,另一部分是专门给32位系统访问的,放在Wow6432Node下面。当32位程序去访问某些键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面。Wow6432Node这个节 点存在于HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面。如果我们希望关闭这个转向的话,可以通过上面的Wow64DisableWow64FsRedirection和RegOpenKeyEx方法办到。

 

 

_________________________________________________

_________________________________________________

 

 

无论是Windows XP Professional X64 Edition、Windows Server 2003X64 Edition还是Windows Vista X64 Edition(以下把均统称为X64系统),都引入了一项技术:文件和注册表的重定向。

 

 //z 2012-2-9 17:40:19 IS2120@CSDN

之所以有这个技术,是为了将32位程序和64位程序分离开。这种在64位平台上运行32位程序的模拟器被称为WOW64。WOW64是"Windows 32 on Windows 64"的简称,它在系统层中另提供了一层,以支持老式的32位程序。

 在X64系统里面,一些特殊的目录和特殊的注册表键被分为2个独立的部分。对于文件系统来说,%systemroot%/system32 目录被保留给64位文件使用,而32位文件会被重定向到%systemroot%/SysWOW64目录。换句话说,所有的32位程序一般情况下只会出现在%systemroot%/SysWOW64目录里面。任何32位程序试图访问%systemroot%/system32 目录的企图都会被重定向到%systemroot%/SysWOW64目录。这个是一个默认的行为,除非程序的线程明确的指名需要关闭这种重定向机制。

 

 //z 2012-2-9 17:40:19 IS2120@CSDN

对于 注册表 来说,也有类似的内容。WOW64子系统也提供了对注册表访问的重定向。如果是32位程序,对注册表的操作不论是读还是写, WOW64都将会截取对HKLM/Software访问,并重定向到HKLM/Software/Wow6432Node(即32位应用程序的注册信息被写在HKLM/Software/Wow6432Node中,而不是预期的HKLM/Software中);如果是64位程序,就直接到 HKLM/Software。

需要重定向的注册表项

注册表重定向,其实质就是维护两套不同的注册表键,一套用于64位,一套用于32位。受影响的键不只是上面提及的HKLM/Software,还包括:
        HKEY_CLASSES_ROOT 
        HKEY_CURRENT_USER/Software/Classes 
        HKEY_LOCAL_MACHINE/Software 
        HKEY_USERS/*/Software/Classes 
        HKEY_USERS/*_Classes
    其中,64位程序的注册信息存储在上面的健中,32位程序的注册信息重定向存储在下列健中:

HKEY_CLASSES_ROOT/WOW6432node 
        HKEY_CURRENT_USER/Software/Classes/WOW6432node 
       HKEY_LOCAL_MACHINE/Software/WOW6432node 
       HKEY_USERS/*/Software/Classes/WOW6432node 
        HKEY_USERS/*_Classes/WOW6432node

 //z 2012-2-9 17:40:19 IS2120@CSDN

当运行32位程序,wow64会截取程序对注册表HKLM/Software的访问,并重定向于HKLM/Software/Wow6432Node。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重定向系统各临时文件夹到另外盘符 首先要在“开始”——“运行”内输入“regedit”打开注册表编辑器,然后要在“文件”下拉菜单中的“导出”功能备份好注册表,以防万一,接着在左侧窗口依次打开: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders 在右侧窗口里,你看到的“名称”就代表那些特殊的文件夹,“数据”就是它们所对应的默认存储路径。修改默认的路径就可以让你的桌面文件夹移动了,下面是所有的. 下面介绍一下各个“名称”所代表的文件夹 名称 含义 默认路径 AppData 应用程序数据目录 C:\Documents and Settings\User name\Application Data Cookies Cookies路径 C:\Documents and Settings\User name\Cookies Desktop 桌面路径 C:\Documents and Settings\User name\桌面 Favorites 收藏夹 C:\Documents and Settings\User name\Favorites NetHood NetHood路径 C:\Documents and Settings\User name\NetHood Personal 我的文档 C:\Documents and Settings\User name\My Documents PrintHood 打印 C:\Documents and Settings\User name\PrintHood Recent 文档项路径 C:\Documents and Settings\User name\Recent SendTo SendTo路径 C:\Documents and Settings\User name\SendTo Start Menu 开始菜单路径 C:\Documents and Settings\User name\「开始」菜单 Templates 新建文件目录 C:\Documents and Settings\User name\Templates Programs 程序菜单路径 C:\Documents and Settings\User name\「开始」菜单\程序 Startup 启动路径 C:\Documents and Settings\User name\「开始」菜单\程序\启动 History 网页历史记录 C:\Documents and Settings\ User name \Local Settings\History My Pictures 图片收藏 C:\Documents and Settings\User name\My Documents\My Pictures My Music 我的音乐 C:\Documents and Settings\User name\My Documents\My Music My Video 我的视频 C:\Documents and Settings\User name\My Documents\My Videos Cache Internet临时文件夹 C:\ Documents and Settings\User name \Temporary Internet Files 这些文件夹称为Shell文件夹 其中“User name”为当前用户的名称 了解了对应的文件夹,就可以根据自己的需要去更改对应的路径了。(千万不要在这儿改啊,那样可就瞎忙乎了,系统重起后它会恢复成原来的路径) 在同一层中你可以看到一个“User Shell Folders”的子键,即在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ User Shell Folders 这里包括了用户定制的所有Shell文件夹的值项。只要通过修改“数据”,就可以改变它们的存储路径。双击需要修改的名称,在弹出的“编辑字符串”的“数值数据”里填上你要更改的完整路径,按下“确定”就完成了。如果没有你需要的,可以在右边窗口单击鼠标右键,选择“新建”菜单中的“字符串值”命令,对应上表,添加一个用于Shell文件夹的字符串值。 在上面的文件夹中,并没有outlook的通讯簿和邮件存放路径,它们分别在 通讯簿路径: HKEY_CURRENT_USER\Software\Microsoft\WAB\WAB4\Wab File Name主键下,将
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值