而HKEY_LOCAL_MACHINE\Software\Wow6432Node 键是专门用于存放32位程序所使用的注册

时间:2022-04-13 08:37:10

在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;

Delphi 禁用x64位系统文件重定向成果