当前位置:首页 > 服务器类 > Windows服务器 > > WindowsX64技术下的重定向机制

WindowsX64技术下的重定向机制

点击次数:29 次 发布日期:2008-11-29 22:55:04 作者:源代码网
源代码网推荐
源代码网推荐

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

      之所以有这个技术,是为了将32位程序和64位程序分离开。这种在64位平台上运行32位程序的模拟器被称为WOW64。以下是MSDN对WOW64的定义
             WOW64 is the x86 emulator that allows 32-bit Windows applications to run on 64-bit Windows.

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

       对于注册表来说,也有类似的内容。
    注册表重定向,其实质就是维护两套不同的注册表键,一套用于64位,一套用于32位。受影响的键包括:
        HKEY_CLASSES_ROOT
        HKEY_CURRENT_USERSoftwareClasses
        HKEY_LOCAL_MACHINESoftware
        HKEY_USERS*SoftwareClasses
        HKEY_USERS*_Classes
    如前面所述,以上这些键会被维护2套,但是这2套键是如何维护的呢?根据相关文档的说明,维护的方法是采用一种被称为注册表反射的机制完成的。简单的说,当我们在安装Microsoft Office之前打开DOC文档,默认的编辑工具应该是写字板,而且是64位版本的写字板。64位的写字板将注册.doc这个扩展名并把这个扩展名关联到写字板程序,根据X64的运行机制,64位程序修改的是64位的注册表键值,但是WOW64会自动的把这个修改会同步到32位的注册表键下面,这样才能保证关联的正确性。
但是,并不是所有的键值都会受到注册表反射机制的影响。实验证明,如果我们使用32位的注册表编辑器在HKEY_LOCAL_MACHINESoftware下新建一个项,然后使用64位的注册表编辑器查看,会发现这个项只会出现在HKEY_LOCAL_MACHINESoftwareWow6432Node键下而不会出现在HKEY_LOCAL_MACHINESoftware键下,因为HKEY_LOCAL_MACHINESoftware键是专门用于存放64位程序所使用的注册表数据的,而HKEY_LOCAL_MACHINESoftwareWow6432Node键是专门用于存放32位程序所使用的注册表数据的。
    说了这么多,有点乱了吧,下面来整理一下:
    1. X64系统引入了重定向机制来实现32位程序数据和64位程序数据的隔离;
    2. 重定向机制可以归结为到文件系统上的重定向和注册表的重定向;
    3. 文件系统的重定向目录包括:Program Files和%Systemroot%System32等常见目录;
    4. 受注册表重定向影响的键包括:
        HKEY_CLASSES_ROOT
        HKEY_CURRENT_USERSoftwareClasses
        HKEY_LOCAL_MACHINESoftware
        HKEY_USERS*SoftwareClasses
        HKEY_USERS*_Classes
    5. 注册表的重定向机制里面采用了反射机制来保证一些注册表数据在32位试图和64位试图里面都是统一的。


源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐
源代码网供稿.
网友评论 (0)
会员中心
服务器类
本站推荐
服务器类之精华