Delphi 禁用x64位系统文件重定向功能

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

在Win7 64位系统下,调用CopyFile函数进行函数拷贝,如果希望拷贝文件到System32目录下,
      需要考虑程序是不是也是64位的,否则,程序会被重定向到Syswow64目录下,
      为了防止出现文件被重定向,就需要调用函数Wow64DisableWow64FsRedirection取消文件的重定向,
      并在完成指定功能后调用Wow64RevertWow64FsRedirection函数进行恢复。

HKEY_LOCAL_MACHINE\Software下新建一个项,然后使用64位的注册表编辑器查看,
     会发现这个项只会出现在HKEY_LOCAL_MACHINE\Software\Wow6432Node键下而不会出
     现在HKEY_LOCAL_MACHINE\Software键下,因为HKEY_LOCAL_MACHINE\Software键是专
     门用于存放64位程序所使用的注册表数据的,而HKEY_LOCAL_MACHINE\Software\Wow6432Node
     键是专门用于存放32位程序所使用的注册表数据的。

var OldWow64RedirectionValue: LongBool;

function DisableWowRedirection: Boolean;
type TWow64DisableWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool;
  StdCall;
var hHandle: THandle;
  Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
begin Result := true;
  try hHandle := GetModuleHandle(‘kernel32.dll‘);
    @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, ‘Wow64DisableWow64FsRedirection‘);
    if ((hHandle <> 0) and (@Wow64DisableWow64FsRedirection <> nil)) then Wow64DisableWow64FsRedirection(OldWow64RedirectionValue);
  except Result := False;
  end;
end;

function RevertWowRedirection: Boolean;
type TWow64RevertWow64FsRedirection = function(var Wow64RevertWow64FsRedirection: LongBool): LongBool;
  StdCall;
var hHandle: THandle;
  Wow64RevertWow64FsRedirection: TWow64RevertWow64FsRedirection;
begin Result := true;
  try hHandle := GetModuleHandle(‘kernel32.dll‘);
    @Wow64RevertWow64FsRedirection := GetProcAddress(hHandle, ‘Wow64RevertWow64FsRedirection‘);
    if ((hHandle <> 0) and (@Wow64RevertWow64FsRedirection <> nil)) then Wow64RevertWow64FsRedirection(OldWow64RedirectionValue);
  except Result := False;
  end;
end;

http://blog.csdn.net/gj333/article/details/8268379

时间: 2024-10-18 22:25:47

Delphi 禁用x64位系统文件重定向功能的相关文章

PL/SQL在win7/win8 x64位下使用客户端连接oracle

新做了win8 x64位的系统.需要使用plsql连接oracle数据库.之前的机器装有64位的oracle11g,plsql可以直接找到oracle_home连接到数据库. 这次不想在本地安装数据库,因此只装了一个32位的数据库客户端.配置环境变量时遇到一些小问题,在此记录下来. 1.下载oracle客户端,然后解压到任意目录下 2.安装好plsql,然后配置plsql的oracle_home和oci库的地址 plsql的preference设置 ORACLE_HOME:F:\oracle\p

hadoop入门-在windows上编译x64位hadoop

环境 Windows 7 x64位,visual studio 2010 professional hadoop 源码版本2.2.0 步骤(来源于书<Pro Apache Hadoop, Second Edition>略作修改. Ensure that JDK 1.6 is or higher is installed. We assume that it is installed in the c:/MyApps/jdkl6/ folder, which should have a bin

解决window7 x64位Anaconda启动报错:AttributeError: &#39;_NamespacePath&#39; object has no attribute &#39;sort&#39;

最近论文需要用到python做数据分析,python语法简单,但是Windows下安装第三方包恶心的要命,statsmodels用pip死活安装不上,网上查了说包相互依赖windows下的pip不能下载全,还有好几个其他的统计包也是如此,整晕了算. 看网上有些python大牛推荐Anaconda,可以解决包的问题,于是卸载本地的python,从官网上下了个Anconda玩玩,结果遇到新问题. 问题如下: An unexpected error has occurred. Please consi

用mingw-w64 编译 x64 位的ffmpeg

本文来自:http://blog.sina.com.cn/s/blog_6125d067010168dt.html 工作中用到了ffmpeg x64. 发现编译出来x64的ffmpeg,很不容易.特记录下来.原计划编译 静态库, 发现静态库,在vs2010调用过程中,总是出现莫名其妙的错误. 后来发现官网上 有编译好的 动态库. 在AAC解码过程,出现杂音. 应该是它的一个bug. 所以决定重新编译个. 一. 准备编译X64的需要mingw-w64 + msys1. 下载 mingw-w642.

windows2008R2 x64位架设IIS7.x的支持SQLServer2008的PHP服务器

客户的服务器是windows2008R2 x64位的,数据库是SQLServer2008版本,要在原来的.net的web版本系统基础上做手机版本,又因为手机版本要支持微信支付,必须用有域名的80端口,本人是用ThinkPHP3.2.3来做后台开发的,一系列下来发现,真是麻烦. 在IIS7.0 (客户已经安装好II7.0 这里就不多说安装过程了,记得选择:"CGI"."ISAPI 扩展"."ISAPI 筛选器")上支持php解析:最好方式是安装 &

CentOS6.6禁用Ctrl+Alt+Del重启功能

#CentOS6.6禁用Ctrl+Alt+Del重启功能 #方法一: vi /etc/init/control-alt-delete.conf #start on control-alt-delete #注释此行 #方法二: mv /etc/init/control-alt-delete.conf /etc/init/control-alt-delete.conf.bak #注:两种方法都无需重启系统即可生效

Delphi xe7 up1 调用android振动功能

Delphi xe7 up1 调用android振动功能 振动用到以下4个单元: Androidapi.JNI.App,Androidapi.JNIBridge,Androidapi.JNI.Os,Androidapi.Helpers 使用方法: var LVibrator: JVibrator; begin LVibrator := TJVibrator.Wrap ((SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_S

nginx的URL重定向功能

nginx的重定向和nginx的反向代理的原理还是有区别的.当把nginx用作URL重定向功能时,当客户端访问网站时,nginx会自动把网站链接跳转到指定的地址,在客户端浏览器地址栏会发现明明访问的是A域名(ip),却显示出了访问B域名(ip),也就是nginx把收到的客户端的请求后把客户端要请求的信息对应的服务器地址发给客户端,让客户端自己去获取,而nginx会返回302正确信息,这就是nginx的URL的重定向功能(rewrite):而nginx作为反向代理服务器时,当浏览器访问网站时,ng

TP 页面跳转success 和 error 以及重定向功能

TP 系统的\Think\Controller类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交. $User = M('User'); //实例化User对象 $result = $User->add($data); if($result){ //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER'] $this->success('新增成功', 'User/list'); } else { //错误页面的默认跳转页