다음을 통해 공유


Wow64DisableWow64FsRedirection 함수(wow64apiset.h)

호출 스레드에 파일 시스템 리디렉션을 사용하지 않도록 설정합니다. 파일 시스템 리디렉션은 기본적으로 사용하도록 설정됩니다.

구문

BOOL Wow64DisableWow64FsRedirection(
  [out] PVOID *OldValue
);

매개 변수

[out] OldValue

WOW64 파일 시스템 리디렉션 값입니다. 시스템은 이 매개 변수를 사용하여 파일 시스템 리디렉션을 되돌리기(다시 사용)하는 데 필요한 정보를 저장합니다.

참고 이 값은 시스템 전용입니다. 예측할 수 없는 동작을 방지하려면 이 값을 어떤 방식으로든 수정하지 마세요.
 

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 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 프로토콜 No
SMB 3.0 TFO(투명 장애 조치(failover)) No
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 No
CsvFS(클러스터 공유 볼륨 파일 시스템) Yes
ReFS(Resilient File System)
 

예제

다음 예제에서는 Wow64DisableWow64FsRedirection 을 사용하여 WOW64에서 실행되는 32비트 애플리케이션이 %SystemRoot%\SysWOW64의 32비트 버전으로 리디렉션되는 대신 %SystemRoot%\System32에서 64비트 버전의 Notepad.exe 열 수 있도록 파일 시스템 리디렉션을 사용하지 않도록 설정합니다.

#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 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

파일 관리 함수

파일 시스템 리디렉션기

Wow64EnableWow64FsRedirection

Wow64RevertWow64FsRedirection