아니, 이 환경 말고…



1. WoW64 환경인지 확인하는 법


대략 아래와 같은 코드를 사용하면 된다.

상세한 설명은 MSDN: IsWow64Process function 참고.


typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;

bool isWow64() {
#ifdef _WIN64
    return true;
#endif
    BOOL bIsWow64 = FALSE;

    //IsWow64Process()가 모든 윈도우에 구현된 건 아니기 때문에
    //이런 방식을 사용해야 함
    fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
        GetModuleHandle(TEXT("kernel32")), "IsWow64Process");

    if (NULL != fnIsWow64Process) {
        if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64)) {
            // 오류 발생시 x86으로 임의로 간주
            return false;
        }
    }
    return (bIsWow64 != FALSE);
}



2. x86에서 x64 레지스트리 접근하는 법


WoW64 환경에서는 x86과 x64 레지스트리 영역이 분리되어있다.

당연한 얘기지만, 기본적으로는 x86 어플에서는 x64 레지스트리에 접근하기 어렵다.

접근하려면 아래 코드와 같이 KEY_WOW64_64KEY 플래그를 사용하면 된다.


if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,

    _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"),

    0, KEY_READ | KEY_WOW64_64KEY, &hUninstKey) != ERROR_SUCCESS) {
    return;
}


x64 어플에서 x86의 레지스트리에 접근할 때는 KEY_WOW64_32KEY를 사용하면 됨.

좀 더 상세한 설명은 stackoverflowMSDN 참조.



3. x86에서 x64의 SYSTEM32 폴더 접근


SYSTEM32 폴더 역시 x86와 x64에서 구분되어 있다.

x86에서 x64의 SYSTEM32 폴더에 접근하려면 SYSTEM32 대신 sysnative를 열면 된다.

대부분의 시스템에서는 C:\Windows\sysnative라는 뜻.



+ Recent posts