레지스트리 리디렉터

레지스트리 리디렉터에서는 WOW64에서 레지스트리의 특정 부분에 대한 별도의 논리적 보기를 제공하여 32비트 및 64비트 애플리케이션을 격리합니다. 레지스트리 리디렉터에서 해당 논리 레지스트리 뷰에 대한 32비트 및 64비트 레지스트리 호출을 가로채 해당 물리적 레지스트리 위치에 매핑합니다. 리디렉션 프로세스는 애플리케이션에 투명합니다. 따라서 32비트 애플리케이션은 데이터가 64비트 Windows의 다른 위치에 저장되어 있더라도 32비트 Windows에서 실행되는 것처럼 레지스트리 데이터에 액세스할 수 있습니다.

ARM의 Windows 10: x86 애플리케이션에 대한 32비트 논리 뷰 외에도 ARM의 Windows 10 32비트 ARM 애플리케이션에 대한 별도의 논리 뷰를 포함합니다.

리디렉션된 레지스트리 경로에서 키의 하위 집합이 공유됩니다. 공유 키에 대한 32비트 레지스트리 호출은 리디렉션되지 않습니다. 대신 키의 물리적 복사본 하나가 레지스트리의 각 논리적 보기에 매핑됩니다. 리디렉션된 키 및 공유 키 목록은 WOW64의 영향을 받는 레지스트리 키를 참조하세요.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: COM 및 기타 메커니즘을 통해 애플리케이션 상호 운용성을 사용하도록 설정하기 위해 리디렉션된 레지스트리 키의 하위 집합도 반영됩니다. 레지스트리 리플렉션 프로세스는 두 레지스트리 뷰 간에 레지스트리 키와 값을 복사하여 동기화된 상태로 유지합니다. 레지스트리 리플렉션은 Windows 7 및 Windows Server 2008 R2부터 제거되었습니다. 자세한 내용은 레지스트리 리플렉션을 참조하세요.

다음 시나리오에서는 이러한 논리적 뷰를 사용하는 것을 보여 줍니다.

  • 32비트 x86 애플리케이션은HKEY_LOCAL_MACHINE\Software\Hello레지스트리 키가 있는지 확인 합니다. 키가 없으면 애플리케이션은 기본값인 "Hello 32비트 x86 world"를 사용하여 키를 만듭니다. 그렇지 않으면 값을 읽고 표시합니다.
  • 동일한 애플리케이션이 "Hello 32비트 x86 world" 대신 "Hello 64비트 월드"를 작성하도록 수정되고 64비트 x64 또는 ARM64 애플리케이션으로 다시 컴파일됩니다.
  • ARM의 Windows 10: 동일한 애플리케이션이 "Hello 32비트 ARM 월드"를 작성하도록 수정되고 32비트 ARM 애플리케이션으로 다시 컴파일됩니다.
  • 32비트 x86 애플리케이션이 64비트 Windows에서 실행되면 "Hello 32비트 x86 world"가 표시됩니다. 64비트 애플리케이션이 실행되면 "Hello 64비트 월드"가 표시됩니다. ARM의 Windows 10: 32비트 ARM 애플리케이션이 64비트 ARM64 Windows에서 실행되면 "Hello 32비트 ARM 월드"가 표시됩니다. 모든 애플리케이션은 동일한 미리 정의된 핸들과 동일한 키 이름을 사용하여 동일한 레지스트리 함수를 호출합니다. 차이점은 각 애플리케이션이 레지스트리의 논리적 보기에서 작동하고 각 보기가 레지스트리의 별도 물리적 위치에 매핑되어 모든 버전의 문자열을 그대로 유지한다는 것입니다.

리디렉션된 키는 Wow6432Node 아래의 물리적 위치에 매핑됩니다. 예를 들어 HKEY_LOCAL_MACHINE\SoftwareHKEY_LOCAL_MACHINE\Software\Wow6432Node로 리디렉션됩니다. 그러나 리디렉션된 키의 실제 위치는 시스템에서 예약된 것으로 간주해야 합니다. 이 위치가 변경될 수 있으므로 애플리케이션은 키의 물리적 위치에 직접 액세스해서는 안 됩니다. 자세한 내용은 대체 레지스트리 보기 액세스를 참조하세요.

ARM의 Windows 10: 리디렉션된 32비트 ARM 키는 WowAA32Node 아래의 물리적 위치에 매핑됩니다.

%ProgramFiles% 또는 %commonprogramfiles%가 포함된 REG_SZ 또는 REG_EXPAND_SZ 데이터를 레지스트리에 쓰는 32비트 애플리케이션을 돕기 위해 WOW64는 이러한 쓰기 작업을 가로채 "%ProgramFiles(x86)%" 및 "%commonprogramfiles(x86)%"로 바꿉니다. 예를 들어 Program Files 디렉터리가 C 드라이브에 있는 경우 "%ProgramFiles(x86)%"가 "C:\Program Files (x86)"로 확장됩니다. 교체는 다음 조건이 충족되는 경우에만 발생합니다.

  • 문자열은 %ProgramFiles% 또는 %commonprogramfiles%로 시작해야 합니다. 문자열이 공백 또는 %가 아닌 다른 문자로 시작하는 경우 대체되지 않습니다.
  • 문자열 비교는 대/소문자를 구분하므로 %ProgramFiles% 또는 %commonprogramfiles%의 경우와 정확히 같아야 합니다. 예를 들어 문자열이 %commonprogramfiles%가 아닌 %CommonProgramFiles%로 시작하는 경우 대체되지 않습니다.
  • 문자열은 MAX_PATH*2+15자를 초과할 수 없습니다. 이 길이를 초과하면 대체되지 않습니다.
  • KEY_WOW64_64KEY 키를 열 수 없습니다. 이 플래그는 키에 대한 작업이 64비트 레지스트리 뷰에서 수행되어야 하므로 대체되지 않도록 지정합니다. 자세한 내용은 대체 레지스트리 보기 액세스를 참조하세요.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: KEY_WOW_64_64KEY 플래그는 키를 교체할지 여부에 영향을 주지 않습니다. 이 플래그는 Windows 7 및 Windows Server 2008 R2부터 교체에 영향을 줍니다.

또한 system32를 포함하는 REG_SZ 또는 REG_EXPAND_SZ 키가 syswow64로 대체됩니다. 문자열은 %windir%\system32를 가리키거나 아래의 경로로 시작해야 합니다. 문자열 비교는 대/소문자를 구분하지 않습니다. 경로와 일치하기 전에 환경 변수가 확장되므로 모든 경로가 대체됩니다. %windir%\system32, %SystemRoot%\system32 및 C:\windows\system32. 이 패치는 Windows 7 이전에 반영된 키에만 적용됩니다.

자세한 내용은 아래 항목을 참조하세요.