关于32位系统程序控制Wow64重定向问题
在默认情况下,64位环境运行32位程序,会启用重定向,比如调用CreateFile时,系统会把system32文件夹重定向到Syswow64等等。但是有些时候需要访问system32文件夹的时候就需要关闭重定向。MS已经提供了一组函数用来控制重定向:Wow64EnableWow64FsRedirection,Wow64DisableWow64FsRedirection,Wow64RevertWow64FsRedirection用法在MSDN里面有DEMO:
#define _WIN32_WINNT 0x0501
#include <Windows.h>
void main()
{
HANDLE hFile = INVALID_HANDLE_VALUE;
PVOID OldValue = NULL;
//Disable redirection immediately prior to the native API
//function call.
if( Wow64DisableWow64FsRedirection(&OldValue) )
{
//Any function calls in this block of code should be as concise
//and as simple as possible to avoid unintended results.
hFile = CreateFile(TEXT("C:\\Windows\\System32\\Notepad.exe"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
//Immediately re-enable redirection. Note that any resources
//associated with OldValue are cleaned up by this call.
if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) )
{
//Failure to re-enable redirection should be considered
//a criticial failure and execution aborted.
return;
}
}
//The handle, if valid, now can be used as usual, and without
//leaving redirection disabled.
if( INVALID_HANDLE_VALUE != hFile )
{
// Use the file handle
}
}
换成AU3代码,一句就搞定了#RequireAdmin
DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1) ; 默认情况下,禁用32位应用程序被重定向到syswow64而不是system32 ;
本帖最后由 nmgwddj 于 2018-7-30 10:21 编辑
这个我想说下自己的看法。
我还是建议如果想操作 System32 目录或者常规注册表位置,还是把程序编译成 64 位,这个应该算是正确的手段。在 AU3 脚本层面,不需要像驱动一样要大面编写积兼容 32 位和 64 位的代码。写起来还是挺简单的。
除非是极端环境,程序必须是 32 位的而需要操作 System32 相关的目录再使用这个方法也不迟。
nmgwddj 发表于 2018-7-30 10:06
这个我想说下自己的看法。
我还是建议如果想操作 System32 目录或者常规注册表位置,还是把程序编译成 6 ...
我只是记录一下而已。 这个方法之前我研究安装输入法的时候用过了,温故知新。 nmgwddj 发表于 2018-7-30 10:06
这个我想说下自己的看法。
我还是建议如果想操作 System32 目录或者常规注册表位置,还是把程序编译成 6 ...
关键是把程序编译成 64 位,很多人是32位系统用不了。 本帖最后由 nmgwddj 于 2018-7-31 12:28 编辑
志艺风云 发表于 2018-7-30 16:36
关键是把程序编译成 64 位,很多人是32位系统用不了。
32 位系统用 32 位呀,为什么要用 64 位呢?编译的时候可以编译出两个版本,不同系统分发不同的版本。 nmgwddj 发表于 2018-7-31 12:27
32 位系统用 32 位呀,为什么要用 64 位呢?编译的时候可以编译出两个版本,不同系统分发不同的版本。
32位通用啊。一般没特殊要求或对性能有大的影响,编译个32位不就好了 afan 发表于 2018-7-31 14:17
32位通用啊。一般没特殊要求或对性能有大的影响,编译个32位不就好了
好吧,还是 32 位更招人喜欢。
页:
[1]