x64系统的判断和x64下文件和注册表访问的重定向(3)

来源:互联网 发布:mac删除的照片在哪里 编辑:程序博客网 时间:2024/05/16 11:47

    下面谈谈x64系统下文件的重定向:
    x64下文件的重定向依然是WOW64具体执行细节的一部分,跟注册表重定向一样同样是为了将32为程序和64位程序分开。所谓文件重定向通俗点讲就是你去访问某些文件夹的文件的时候,会被定位到其他文件夹下面的文件去,而且这一切依然对用户透明。主要有以下一些文件夹会被重定向:
    %Systemroot%/System32

    %ProgramFiles%
    当一个32位程序在默认情况下去访问%Systemroot%/System32时,会被定位到%Systemroot%/Syswow64文件夹下面。

    要关闭和开启(x64下文件重定向默认是开启的)文件的重定向,需要了解三个API:
        Wow64EnableWow64FsRedirection
        Wow64DisableWow64FsRedirection
        Wow64RevertWow64FsRedirection

    不过MSDN说了Wow64EnableWow64FsRedirection不好云云,自己看:
    The Wow64EnableWow64FsRedirection function enables or disables file system redirection for the calling thread.
This function may not work reliably when there are nested calls. Therefore, this function has been replaced by the Wow64DisableWow64FsRedirection and Wow64RevertWow64FsRedirection functions.
BOOLEAN Wow64EnableWow64FsRedirection(
  BOOLEAN Wow64FsEnableRedirection
);

 

    所以我们就使用Wow64DisableWow64FsRedirection和Wow64RevertWow64FsRedirection,这两个函数在Kernel32.dll里面,当然32位的这个DLL是没有这两个函数的,因此需要从dll中导出来使用。

    直接上代码算了。

    KWow64FsRedrt.h

    KWow64FsRedrt.cpp

    测试代码:

 

    另外%ProgramFiles%这个环境变量并不受这两个API的影响,而只跟应用程序本身是否是32还是64位有关,当你使用ExpandEnvironmentStrings来展开%ProgramFiles%时,如果是32位程序,则返回的路径是C:/Program Files (x86),假设你的系统安装在c盘。而如果是64位程序,则返回C:/Program Files。

 

[end]

原创粉丝点击