Acessando o diretório system32 no Windows 64 bits


Em sistemas operacionais 64 bits (Windows), quando tentamos acessar o diretório C:\windows\system32, o sistema operacional automaticamente no redireciona para C:\windows\SysWOW64.

Para conseguirmos acessar o diretório correto, é necessário desabilitar esse redirecionamento através da função DisableWow64FsRedirection.

Como fazer no Visual Studio:


#include 

void disable64redirection()
{
    PVOID OldValue = NULL;

    // desabilitamos o redirecionamento 
    if( Wow64DisableWow64FsRedirection(&OldValue) ) {
        
		// fazemos o que queremos fazer

        // voltamos o redirecionamento   
        if ( FALSE != Wow64RevertWow64FsRedirection(OldValue) ) {
            // OK
        }
    }    
}
Como fazer no C Builder:


#include "windows.h"

void disable64redirection()
{
    PVOID OldValue = NULL;

	// carregamos a API
    typedef BOOL (WINAPI * LPWOW64DISABLEWOW64FSREDIRECTION)(PVOID*);
    LPWOW64DISABLEWOW64FSREDIRECTION lpfWow64DisableWow64FsRedirection;

    typedef BOOL (WINAPI * LPWOW64REVERTWOW64FSREDIRECTION)(PVOID*);
    LPWOW64REVERTWOW64FSREDIRECTION lpfWow64RevertWow64FsRedirection;

    HMODULE hModule;
    hModule = LoadLibrary( _T("kernel32.dll") );
    if (0 == hModule)
        return false;

    lpfWow64DisableWow64FsRedirection = (LPWOW64DISABLEWOW64FSREDIRECTION)
    GetProcAddress( hModule, "Wow64DisableWow64FsRedirection");

    lpfWow64RevertWow64FsRedirection = (LPWOW64REVERTWOW64FSREDIRECTION)
    GetProcAddress( hModule, "Wow64RevertWow64FsRedirection");
    
	// desabilitamos o redirecionamento        
	(*lpfWow64DisableWow64FsRedirection)(&OldValue);
	
	// fazemos o que queremos fazer

    // voltamos o redirecionamento   
	(*lpfWow64RevertWow64FsRedirection)(&OldValue);
	FreeLibrary(hModule);
}

Fonte: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365743%28v=vs.85%29.aspx




Comentários

Copyright © 2018 Anderson Bravo
www.andersonbravo.com.br
anderson@andersonbravo.com.br