原来的地址

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

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

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

之前在(3)里面讨论过%ProgramFiles%这个环境变量的指向问题,其实在x64环境下面还有两个环境变量可以使用:%ProgramFiles(x86)%和%ProgramW6432%,如果你的系统安装在C盘,那么对应关系是这样的(注32位系统只有%ProgramFiles%,这里不讨论):


%ProgramFiles%
%ProgramFiles(x86)%
%ProgramW6432%
32位程序
C:\Program Files (x86)
C:\Program Files (x86)
C:\Program Files
64位程序
C:\Program Files
C:\Program Files (x86)
C:\Program Files

分享一个有意思的文件重定向问题,在Wow环境(也就是32位程序运行在64位系统下)下,通过一种特殊的Hack方式可以规避文件重定向。想象这样一种场景,如果你的32位程序在64位系统想访问C:\Windows\System32\systemlnk.lnk,它实际上会被重定向访问C:\Windows\SysWOW64\systemlnk.lnk这个文件,可能就不是你想要的结果了,解决这个问题,用(3)里面提到的关闭文件重定向的方式是可以可以解决的,另外一种方式就是这里提到的Hack方式,把C:\Windows\System32\systemlnk.lnk里面的System32换sysnative,变成C:\Windows\sysnative\systemlnk.lnk,那么就可以真正去访问C:\Windows\System32\systemlnk.lnk了,也不用去关闭文件重定向了。

注:32位系统下的32位程序和64位系统下64位程序不要用这种方式。

// -------------------------------------------------------------------------
// 函数     : KWow64FsRedrt::IsWow64Process
// 功能     : 判断是否运行在Wow模式
// 返回值   : BOOL
// 附注     : 也就是32位程序运行在64位系统,而64位程序调用这个函数返回FALSE
// -------------------------------------------------------------------------
BOOL KWow64FsRedrt::IsWow64Process()
{
    BOOL bIsWow64 = FALSE;

    typedef BOOL (WINAPI *PF_ISWOW64PROCESS)(HANDLE, PBOOL);
    PF_ISWOW64PROCESS pfIsWow64Process = (PF_ISWOW64PROCESS)::GetProcAddress(
        GetModuleHandle(_T("kernel32.dll")), "IsWow64Process");
    if (pfIsWow64Process)
    {
        if (!pfIsWow64Process(GetCurrentProcess(), &bIsWow64))
        {
            // handle error
        }
    }  

    return bIsWow64;
}

x64系统的判断和x64下文件和注册表访问的重定向——补记的更多相关文章

  1. x64系统的判断和x64下文件和注册表访问的重定向(举例了GetProcAddress后转成函数指针的用法)

    判断一个32位应用程序是否运行在x64系统下,可以使用下面的代码: BOOL IsX64System() { BOOL bIsWow64 = FALSE; typedef BOOL (WINAPI * ...

  2. ie下文件上传无权访问的问题

    最近项目遇到个问题,ie下文件上传无权访问,在网上找了很久才找到答案,原来是因为ie下不能用js触发input=file的点击事件,必须手动点击才可以.

  3. WINDOWS XP 系统显示乱码的解决方法(修改注册表,使用正常字体)

            一位同事的计算机进入WINDOWS XP系统后,电脑里的所有汉字全部显示乱码,很多办公文档无法打开而影响工作.因为第一次遇到这种问题,当然首先是百度解决了,搜索了相关的信息后找到了答案 ...

  4. XP系统显示文件夹选项属性被删除解决注册表

    Title:XP系统显示文件夹选项属性被删除解决注册表 -- 2010-11-18 13:17 昨天中了个毒窝,还有恶意软件,十分不爽. 开始恶意软件把显示所有文件夹给删除了,去找了个注册表,重新注册 ...

  5. 【读书笔记】C#高级编程 第二十四章 文件和注册表操作

    (一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByR ...

  6. 删除Oracle文件、注册表

    用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设置->控制面板-& ...

  7. 【Visual Lisp】驱动器、目录、文件和注册表

    ;;驱动器.目录.文件.和注册表;;★★★01.获取并创建驱动器盘符组成的表★★★(setq Drives (vlax-get-property (vlax-create-object "S ...

  8. MFC学习 文件操作注册表操作

    c读写文件 void CFileView::OnRead() { FILE *pFile = fopen("1.txt", "r"); /*char ch[10 ...

  9. 彻底清除Window7下的360注册表

    当流氓360遇到强迫症,将注定有一场厮杀... 今天装了个虚拟机,其中win7系统是在网上随便下载了一个,是非纯净版的,自带了360在内的好多软件,其他软件都轻松删掉,但查看注册表时发现竟然有360残 ...

随机推荐

  1. Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  2. python 如何优雅地退出子进程

    python 如何优雅地退出子进程 主进程产生子进程,子进程进入永久循环模式.当主进程要求子进程退出时,如何能安全地退出子进程呢? 参考一些代码,我写了这个例子.运行之后,用kill pid试试.pi ...

  3. 编译GDAL支持OpenCL使用GPU加速

    前言 GDAL库中提供的gdalwarp支持各种高性能的图像重采样算法,图像重采样算法广泛应用于图像校正,重投影,裁切,镶嵌等算法中,而且对于这些算法来说,计算坐标变换的运算量是相当少的,绝大部分运算 ...

  4. SQL 数据库语言分析总结(二)

    介绍sql语言 我们接着一的顺序继续介绍这个语言 数据类型 整形: TINYINT(8位) SMALLINT(16位) MEDIUMINT(24位) INT(32位) BIGINT(64位) 实数: ...

  5. Android 之Toast讲解-android学习之旅(一)

    Toast比较常用,用于显示简短的提醒,比如网络连接断开等. Toast的简单编码实例 findViewById(R.id.button1).setOnClickListener(new OnClic ...

  6. 看人装X,我就来气,开启极限装X模式

    本文书写,纯属扯淡,请勿观看 4进制比二进制更合理,在01的状态中添加了两种状态,从无到有和从有到无的两种过度状态. 如果非要用数值表示,用概率表示.01作为近代计算机的基础,但终究淘汰,构成下一代计 ...

  7. 【一天一道LeetCode】#119. Pascal's Triangle II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  8. iOS中 MPMoviePlayer 实现视频音频播放 作者:韩俊强

    ios播放视频文件一般使用 MPMoviePlayerViewController 和 MPMoviePlayerController.前者是一个view,后者是个Controller.区别就是 MP ...

  9. 判断无向图是否有环路的方法 -并查集 -BFS

    可以利用并查集或者带颜色标记的BFS(来自算法导论)判断. 首先介绍第一种,用并查集来判断: 首先初始化所有元素的根为-1,-1代表根节点,接下来对于图中的每一条边(v1,v2)都并入集合,并入的方式 ...

  10. [C++学习历程]Visual Studio 2010 的HelloWorld

    大学时期曾学过C++的知识,那时候也没有使用VS这样高档的IDE工具,就是C++6.0那样来的.对于重新拾起C++来说,换了个IDE,那么就先从使用IDE学起吧~ 作者:苏生米沿 本文链接:http: ...