32bit程序在64bit操作系统下处理重定向细节(转自http://bbs.pediy.com/showthread.php?t=89054)
1. 64bit操作系统的重定向机制以及目的
在64bit操作系统中,为了无缝兼容32bit程序的运行,64bit的Windows操作系统采用重定向机制。目的是为了能让32bit程序在64bit的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与64bit程序冲突。
微软采用重定向机制的原理很简单,说白了就是 让关键文件/文件夹或者关键注册表有2个副本。 1个副本是给32bit程序访问,一个副本给64bit程序访问。
PS: 以上不是用专业术语解释,只是用白话解释。如果觉得不够专业,可以查阅详细资料
2. 64bit操作系统是如何控制32bit和64bit程序访问对应各自的副本?
这个问题,就是重定向机制的核心功能。
例子: 32bit程序在64bit Windows操作系统,要访问system32目录。
在正常的情况下: 64bit Windows操作系统的重定向机制 会在内部 把 system32目录 转向 syswow64目录, 因此32bit程序对system32目录的操作,实际是对syswow64目录进行操作。
以为由于重定向的干预,因为可以这么认为 system32目录是供给64bit程序使用的,而syswow64目录是给32bit程序使用的
代码例子: 32bit程序中有一个代码
deletefile('c:\windows\system32\a.txt') ;
这个代码在64bit Windows操作系统中,它只会删除syswow64目录中的a.txt文件,而不会删除system32目录的a.txt文件。 这就是重定向的干预结果。
3. 那32bit程序要真正访问64bit程序的system32目录要如何做呢?
微软提供一套API,可以做到上面的要求。 通过 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection API 来配合使用
代码例子: 32bit程序中有一个代码
Wow64DisableWow64FsRedirection // 关闭重定向
deletefile('c:\windows\system32\a.txt') ;
Wow64RevertWow64FsRedirection // 恢复重定向
以上代码,就有效的删除了system32目录里面的a.txt文件,而不是syswow64目录中的a.txt文件。
4. 32bit程序在64bit操作系统下不关闭重定向功能,在全盘枚举系统目录时,是否可以同时把32bit和64bit的目录都枚举出来?
经过我测试,无法同时枚举出来,只能做2次重复扫描,第一次在打开重定向枚举出32bit的目录,然后第二次关闭重定向,在枚举64bit的目录。
6. 既然文件目录有重定向,那么注册表有没有重定向之后的副本?
有, 跟文件重定向一样。
示例: 32bit程序在64bitWindows操作系统正常访问'HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID'
在重定向的干预下,32bit程序被重定向访问到'HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432node\CLSID'
如果要真正访问'HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID' ,请按照 第3点的 代码示例来做。
7. 32bit程序在64bit操作系统下不关闭重定向功能,枚举系统注册表,是否可以同时把32bit和64bit的注册信息同时枚举出来?
经过我测试,无法同时枚举出来,只能做2次重复扫描,第一次在打开重定向枚举出32bit的注册表信息,然后第二次关闭重定向,在枚举64bit的注册表信息。
8. 32bit程序在64bit操作系统下不关闭重定向功能,直接硬编码访问32bit副本的关键目录和关键注册表是否可行?
经过我测试,是可以的。
代码例子:
deletefile('c:\windows\syswow64\a.txt') ;
以上代码就是可以直接删除syswow64目录下的a.txt文件.
同理,注册表访问也一样适用.
32bit程序在64bit操作系统下处理重定向细节(转自http://bbs.pediy.com/showthread.php?t=89054)的更多相关文章
- [Windows核心编程]32bit程序在64bit操作系统下处理重定向细节[1]
这段时间,都在做Ring3层的普通32bit程序兼容64bit操作系统的代码修改,在此记录修改和学习心德.编程领域太广, 任何人经历有限,本人不是专家,所以我一贯原则是: 用到的时候,才去研究,在去记 ...
- 在Linux操作系统下备份恢复技术的应用 转自https://yq.aliyun.com/articles/50205?spm=5176.100239.blogcont24250.9.CfBYE9
摘要: 安全防护:在Linux操作系统下备份恢复技术的应用 原文参见:http://linux.chinaunix.net/techdoc/system/2005/12/19/925898.shtm ...
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...
- QT5.4.0安装以及与VS2010整合安装---64bit操作系统解决方案
QT5.4.0安装以及与VS2010整合安装---64bit操作系统解决方案 注意,目前QT官网不能下载,必须提供注册,然后才可以下载. 网上不同版本安装的细节有差异,特将我的安装相关操作贴出来,希望 ...
- 分析Android :java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit
Crash 日志: java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.ireader.plug.sdk/iread ...
- Windows 7操作系统下PHP 7的安装与配置(图文详解)
前提博客 Windows 7操作系统下Apache的安装与配置(图文详解) 从官网下载 PHP的官网 http://www.php.net/ 特意,新建这么一个目录 ...
- 百度地图 libBaiduMapSDK_base_v4_2_1.so" is 32-bit instead of 64-bit错误
20191111 集成android sdk,华为手机基本都启动报错,如下: W/System.err: java.security.NoSuchProviderException: no such ...
- win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结
win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结 一:前提 注意:现在有两种安装的方式 1. oracle11g服务端(64位)+oracle客户端(32位)+plsql(3 ...
- Windows操作系统下搭建Git服务器和客户端。
本文将介绍如何在Windows操作系统下搭建Git服务器和客户端.服务器端采用的是Bonobo Git Server,一款用ASP.NET MVC开发的Git源代码管理工具,界面简洁,基于Web方式配 ...
随机推荐
- 学习OpenCV:滤镜系列(15)——羽化(模糊边缘)
============================================== 版权所有:小熊不去实验室CSDN博客 ================================== ...
- phper談談最近重構代碼的感受(1)
作爲一個工作時間並不算長的phper,卻參與了兩家公司的代碼重構.下面談談我的一些感受. 在mjm公司,當時我負責日常的需求開發和2.0的重構.當初的重構更多的是clean codes和一些代碼規範上 ...
- C#中的文件操作2
1. 读取文件的方法: 1. 声明一个文件流: 目的是为了内存与文件之间的桥梁,可以进行数据的往来. FileStream fs = new FileStream(filename,FileMode ...
- 【Zookeeper】源码分析之Watcher机制(二)
一.前言 前面已经分析了Watcher机制中的第一部分,即在org.apache.zookeeper下的相关类,接着来分析org.apache.zookeeper.server下的WatchManag ...
- Django Function Based View(FBV)和Class Based View (CBV)对比
一.FBV处理过程 首先来看一下FBV逻辑过程: 1.简单过程(借用官方示例): urls: from django.conf.urls import url from . import views ...
- 关于Ueditor 前后端分离实现文件上传到独立服务器的问题 望大神们赐教
最近,由于网站实现多台服务器负载均衡,导致编辑器上传文件需要同步,可是使用同步软件太慢,不太现实,所以想到实现编辑器上传文件直接上传到独立文件服务器.可是没想到遇到坑了. 1.在本地IIS 中添加网站 ...
- Python第一天——入门Python(2)字符串的简单操作
数据的操作 字符串的一些常用操作: 1 1 #!/usr/bin/env python 2 # #coding=utf-8 3 # 4 # test='hello world' 5 # print(t ...
- 三分钟跑起jsblocks
1下载代码 git clone https://github.com/astoilkov/jsblocks-seed.git 2安装依赖 Peng@PENG-PC /F/home/qianduan ...
- Spark Graphx编程指南
问题导读1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图?2.PageRank算法在图中发挥什么作用?3.三角形计数算法的作用是什么?Spark中文手册-编程指南Spark之一个快 ...
- IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键
IntelliJ IDEA 默认快捷键模式下 自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f