Wow64EnableWow64FsRedirection 函数 (wow64apiset.h)
启用或禁用调用线程的文件系统重定向。
当存在嵌套调用时,此函数可能无法可靠地工作。 因此,此函数已替换为 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection 函数。
注意 这两种控制文件系统重定向的方法不能以任何方式结合使用。 不要将 Wow64EnableWow64FsRedirection 函数与 Wow64DisableWow64FsRedirection 函数或 Wow64RevertWow64FsRedirection 函数一起使用。
语法
BOOLEAN Wow64EnableWow64FsRedirection(
BOOLEAN Wow64FsEnableRedirection
);
参数
Wow64FsEnableRedirection
指示 WOW64 系统文件夹重定向的请求类型。 如果 为 TRUE,则启用请求重定向;如果 为 FALSE,则禁用请求重定向。
返回值
指示函数是否成功的布尔值。 如果 为 TRUE,则函数成功;如果 为 FALSE,则表示函数失败。
注解
对于想要获取本机 system32 目录访问权限的 32 位应用程序,此函数非常有用。 默认情况下,WOW64 文件系统重定向处于启用状态。
注意Wow64EnableWow64FsRedirection 函数影响当前线程执行的所有文件操作,如果文件系统重定向被禁用任意时间长度,这可能会产生意外后果。 例如,DLL 加载依赖于文件系统重定向,因此禁用文件系统重定向将导致 DLL 加载失败。 此外,许多功能实现使用延迟加载,在禁用重定向时会失败。 初始延迟加载操作的失败状态保持不变,因此,即使重新启用文件系统重定向,延迟加载函数的任何后续使用也会失败。 若要避免这些问题,请在调用特定文件 I/O 函数之前立即禁用文件系统重定向, (如不得重定向的 CreateFile) ,然后使用 立即重新启用文件系统重定向
Wow64EnableWow64FsRedirection(TRUE)
。在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 否 |
SMB 3.0 透明故障转移 (TFO) | 否 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 否 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 否 |
示例
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0501
#ifdef NTDDI_VERSION
#undef NTDDI_VERSION
#endif
#define NTDDI_VERSION 0x05010000
#include <Windows.h>
void main()
{
HANDLE hFile = INVALID_HANDLE_VALUE;
// Disable redirection immediately prior to the native API
// function call.
if( Wow64EnableWow64FsRedirection(FALSE) )
{
// 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 == Wow64EnableWow64FsRedirection(TRUE) )
{
// Failure to re-enable redirection should be considered
// a critical failure and execution aborted.
return;
}
}
// The handle, if valid, can be used as usual without
// leaving redirection disabled.
if( INVALID_HANDLE_VALUE != hFile )
{
// Use the file handle
}
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wow64apiset.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |