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 之后立即重新启用文件系统重定向。
 
禁用文件系统重定向仅影响当前线程执行的操作。 某些函数(如 CreateProcessAsUser)在另一个线程上执行其工作,该线程不受调用线程中文件系统重定向状态的影响。

在 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

另请参阅

文件管理函数

文件系统重定向程序

Wow64EnableWow64FsRedirection

Wow64RevertWow64FsRedirection