Compartilhar via


Função Wow64DisableWow64FsRedirection (wow64apiset.h)

Desabilita o redirecionamento do sistema de arquivos para o thread de chamada. O redirecionamento do sistema de arquivos está habilitado por padrão.

Sintaxe

BOOL Wow64DisableWow64FsRedirection(
  [out] PVOID *OldValue
);

Parâmetros

[out] OldValue

O valor de redirecionamento do sistema de arquivos WOW64. O sistema usa esse parâmetro para armazenar as informações necessárias para reverter (reabilitar) o redirecionamento do sistema de arquivos.

Nota Esse valor é apenas para uso do sistema. Para evitar um comportamento imprevisível, não modifique esse valor de forma alguma.
 

Retornar valor

Se a função for bem-sucedida, o valor retornado será um valor diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Essa função é útil para aplicativos de 32 bits que desejam obter acesso ao diretório nativo system32. Por padrão, o redirecionamento do sistema de arquivos WOW64 está habilitado.

O emparelhamento de função Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection é uma substituição para a funcionalidade da função Wow64EnableWow64FsRedirection .

Para restaurar o redirecionamento do sistema de arquivos, chame a função Wow64RevertWow64FsRedirection . Cada chamada bem-sucedida para a função Wow64DisableWow64FsRedirection deve ter uma chamada correspondente para a função Wow64RevertWow64FsRedirection . Isso garantirá que o redirecionamento seja habilitado novamente e libere os recursos do sistema associados.

Nota A função Wow64DisableWow64FsRedirection afeta todas as operações de arquivo executadas pelo thread atual, que podem ter consequências não intencionais se o redirecionamento do sistema de arquivos estiver desabilitado por qualquer período de tempo. Por exemplo, o carregamento de DLL depende do redirecionamento do sistema de arquivos, portanto, desabilitar o redirecionamento do sistema de arquivos fará com que o carregamento de DLL falhe. Além disso, muitas implementações de recursos usam o carregamento atrasado e falharão enquanto o redirecionamento estiver desabilitado. O estado de falha da operação inicial de carregamento de atraso é persistente, portanto, qualquer uso subsequente da função de carregamento de atraso falhará mesmo depois que o redirecionamento do sistema de arquivos for habilitado novamente. Para evitar esses problemas, desabilite o redirecionamento do sistema de arquivos imediatamente antes das chamadas para funções de E/S de arquivo específicas (como CreateFile) que não devem ser redirecionadas e habilite novamente o redirecionamento do sistema de arquivos imediatamente depois usando Wow64RevertWow64FsRedirection.
 
Desabilitar o redirecionamento do sistema de arquivos afeta apenas as operações feitas pelo thread atual. Algumas funções, como CreateProcessAsUser, fazem seu trabalho em outro thread, que não é afetado pelo estado do redirecionamento do sistema de arquivos no thread de chamada.

No Windows 8 e Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (SMB) 3.0 No
TFO (Failover transparente) do SMB 3.0 No
SMB 3.0 com compartilhamentos de arquivos de expansão (SO) No
Sistema de arquivos de Volume Compartilhado Clusterizado (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Não
 

Exemplos

O exemplo a seguir usa Wow64DisableWow64FsRedirection para desabilitar o redirecionamento do sistema de arquivos para que um aplicativo de 32 bits em execução em WOW64 possa abrir a versão de 64 bits do Notepad.exe em %SystemRoot%\System32 em vez de ser redirecionado para a versão de 32 bits em %SystemRoot%\SysWOW64.

#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
    }
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista, Windows XP Professional x64 Edition [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008, Windows Server 2003 com SP1 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wow64apiset.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

Funções de gerenciamento de arquivos

Redirecionador do sistema de arquivos

Wow64EnableWow64FsRedirection

Wow64RevertWow64FsRedirection