Wow64DisableWow64FsRedirection 函数 (wow64apiset.h)
禁用调用线程的文件系统重定向。 默认已启用文件系统重定向。
语法
BOOL Wow64DisableWow64FsRedirection(
[out] PVOID *OldValue
);
参数
[out] OldValue
WOW64 文件系统重定向值。 系统使用此参数来存储还原 (重新启用) 文件系统重定向所需的信息。
注意 此值仅供系统使用。 为了避免不可预知的行为,请勿以任何方式修改此值。
返回值
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
此函数适用于想要访问本机 system32 目录的 32 位应用程序。 默认情况下,WOW64 文件系统重定向处于启用状态。
Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection 函数配对取代了 Wow64EnableWow64FsRedirection 函数的功能。
若要还原文件系统重定向,请调用 Wow64RevertWow64FsRedirection 函数。 每次成功调用 Wow64DisableWow64FsRedirection 函数都必须具有对 Wow64RevertWow64FsRedirection 函数的匹配调用。 这将确保重新启用重定向并释放关联的系统资源。
注意Wow64DisableWow64FsRedirection 函数会影响当前线程执行的所有文件操作,如果文件系统重定向在任意时间长度被禁用,这可能会产生意外的后果。 例如,DLL 加载依赖于文件系统重定向,因此禁用文件系统重定向将导致 DLL 加载失败。 此外,许多功能实现使用延迟加载,在禁用重定向时会失败。 初始延迟加载操作的失败状态是永久性的,因此即使重新启用文件系统重定向,对延迟加载函数的任何后续使用都将失败。 若要避免这些问题,请在调用不可重定向的特定文件 I/O 函数 ((如 CreateFile) )之前立即禁用文件系统重定向,并在使用 Wow64RevertWow64FsRedirection 之后立即重新启用文件系统重定向。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 否 |
SMB 3.0 透明故障转移 (TFO) | 否 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 否 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 否 |
示例
以下示例使用 Wow64DisableWow64FsRedirection 禁用文件系统重定向,以便 WOW64 下运行的 32 位应用程序可以在 %SystemRoot%\System32 中打开 64 位版本的 Notepad.exe,而不是重定向到 %SystemRoot%\SysWOW64 中的 32 位版本。
#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;
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 critical 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
}
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista、Windows XP Professional x64 Edition [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008、Windows Server 2003 SP1 [仅限桌面应用] |
目标平台 | Windows |
标头 | wow64apiset.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |