레지스트리 가상화

레지스트리 가상화 는 전역 영향을 주는 레지스트리 쓰기 작업을 사용자별 위치로 리디렉션할 수 있도록 하는 애플리케이션 호환성 기술입니다. 이 리디렉션은 레지스트리에서 읽거나 레지스트리에 쓰는 애플리케이션에 투명합니다. Windows Vista부터 지원됩니다.

이러한 형태의 가상화는 임시 애플리케이션 호환성 기술입니다. 더 많은 애플리케이션이 Windows Vista 이상 버전의 Windows와 호환되므로 Microsoft는 이후 버전의 Windows 운영 체제에서 제거할 계획입니다. 따라서 애플리케이션이 시스템의 레지스트리 가상화 동작에 종속되지 않는 것이 중요합니다.

가상화는 기존 애플리케이션에 대한 호환성을 제공하기 위한 것입니다. Windows Vista 이상 버전의 Windows용으로 설계된 애플리케이션은 중요한 시스템 영역에 쓰지 않아야 하며, 가상화에 의존하여 문제를 해결해서는 안 됩니다. Windows Vista 이상 버전의 Windows에서 실행되도록 기존 코드를 업데이트하는 경우 개발자는 애플리케이션이 ACL(액세스 제어 목록)을 올바르게 사용하는 %alluserprofile% 내의 사용자별 위치 또는 컴퓨터 위치에만 데이터를 저장해야 합니다.

UAC 규격 애플리케이션을 빌드하는 방법에 대한 자세한 내용은 UAC 개발자 가이드를 참조하세요.

가상화 개요

Windows Vista 이전에는 일반적으로 관리자가 애플리케이션을 실행했습니다. 결과적으로 애플리케이션은 시스템 파일 및 레지스트리 키에 자유롭게 액세스할 수 있습니다. 이러한 애플리케이션이 표준 사용자가 실행한 경우 액세스 권한이 부족하여 실패합니다. Windows Vista 이상 버전의 Windows는 이러한 작업을 자동으로 리디렉션하여 이러한 애플리케이션에 대한 애플리케이션 호환성을 향상시킵니다. 예를 들어 전역 저장소(HKEY_LOCAL_MACHINE\Software)에 대한 레지스트리 작업은 가상 저장소(HKEY_USERS\User SID>_Classes\<VirtualStore\Machine\Software)라고 하는 사용자 프로필 내의 사용자별 위치로 리디렉션됩니다.

레지스트리 가상화는 다음 유형으로 광범위하게 분류할 수 있습니다.

레지스트리 가상화 열기

호출자가 키에 대한 쓰기 권한이 없으며 키를 열려고 하면 해당 호출자에 대해 허용되는 최대 액세스 권한으로 키가 열립니다.

키에 대해 REG_KEY_DONT_SILENT_FAIL 플래그를 설정하면 작업이 실패하고 키가 열리지 않습니다. 자세한 내용은 이 항목의 뒷부분에 있는 "레지스트리 가상화 제어"를 참조하세요.

레지스트리 가상화 작성

호출자가 키에 대한 쓰기 권한이 없으며 해당 키에 값을 쓰거나 하위 키를 만들려고 하면 값이 가상 저장소에 기록됩니다.

예를 들어 제한된 사용자가 AppKey1HKEY_LOCAL_MACHINE\Software\ 값을 쓰려고 하면 가상화는 쓰기 작업을 HKEY_USERS\User SID>_Classes\<VirtualStore\Machine\Software\AppKey1로 리디렉션합니다.

레지스트리 가상화 읽기

호출자가 가상화된 키에서 읽는 경우 레지스트리는 가상화된 값(가상 저장소)과 가상이 아닌 값(전역 저장소)을 호출자에게 모두 병합된 뷰를 제공합니다.

예를 들어 HKEY_LOCAL_MACHINE\Software\AppKey1 에 두 개의 값 V1과 V2가 포함되어 있고 제한된 사용자가 V3 값을 키에 쓴다고 가정해 보겠습니다. 사용자가 이 키에서 값을 읽으려고 하면 병합된 뷰에는 전역 저장소의 값 V1 및 V2 값과 가상 저장소의 값 V3이 포함됩니다.

가상 값이 있는 경우 전역 값보다 우선합니다. 위의 예제에서 전역 저장소에 이 키 아래에 값 V3이 있더라도 V3 값은 가상 저장소에서 호출자에게 반환됩니다. 가상 저장소에서 V3을 삭제하면 V3이 전역 저장소에서 반환됩니다. 즉, V3가 HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1에서 삭제되었지만 AppKey1에 값 V3이 HKEY_LOCAL_MACHINE\Software\ 경우 해당 값은 전역 저장소에서 반환됩니다.

레지스트리 가상화 범위

레지스트리 가상화는 다음에 대해서만 사용하도록 설정됩니다.

  • 32비트 대화형 프로세스.
  • HKEY_LOCAL_MACHINE\Software의 키입니다.
  • 관리자가 쓸 수 있는 키입니다. (관리자가 키에 쓸 수 없는 경우 관리자가 실행한 경우에도 이전 버전의 Windows에서 애플리케이션이 실패했을 것입니다.)

레지스트리 가상화는 다음에 대해 사용하지 않도록 설정됩니다.

  • 64비트 프로세스.

  • 서비스와 같이 대화형이 아닌 프로세스입니다.

    레지스트리를 서비스(또는 가상화를 사용하도록 설정하지 않은 다른 프로세스) 간의 IPC(프로세스 간 통신) 메커니즘으로 사용하고 키가 가상화되면 애플리케이션이 제대로 작동하지 않습니다. instance 경우 바이러스 백신 서비스가 애플리케이션에서 설정한 값에 따라 서명 파일을 업데이트하는 경우 서비스는 전역 저장소에서 읽지만 애플리케이션은 가상 저장소에 쓰기 때문에 해당 서명 파일을 업데이트하지 않습니다.

  • 사용자를 가장하는 프로세스입니다. 프로세스에서 사용자를 가장하는 동안 작업을 시도하는 경우 해당 작업은 가상화되지 않습니다.

  • 드라이버와 같은 커널 모드 프로세스입니다.

  • 매니페스트에 지정된 ExecutionLevel을 요청한 프로세스입니다.

  • HKEY_LOCAL_MACHINE\Software\Classes,HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsHKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT키 및 하위 키입니다.

레지스트리 가상화 제어

매니페스트에서 requestedExecutionLevel 을 사용하여 애플리케이션 수준에서 가상화를 제어하는 것 외에도 관리자는 HKEY_LOCAL_MACHINE\Software키별로 가상화를 사용하거나 사용하지 않도록 설정할 수 있습니다. 이렇게 하려면 다음 표에 나열된 플래그와 함께 Reg.exe 명령줄 유틸리티 FLAGS 옵션을 사용합니다.

플래그 의미
REG_KEY_DONT_SILENT_FAIL 이 플래그는 열린 레지스트리 가상화를 사용하지 않도록 설정합니다. 이 플래그가 설정되고 가상화가 사용하도록 설정된 키에서 열린 작업이 실패하는 경우 레지스트리는 키를 다시 열려고 시도하지 않습니다. 이 플래그가 명확하면 레지스트리는 요청된 액세스 대신 MAXIMUM_ALLOWED 액세스 권한으로 키를 다시 열려고 시도합니다.
REG_KEY_DONT_VIRTUALIZE 이 플래그는 쓰기 레지스트리 가상화를 사용하지 않도록 설정합니다. 호출자가 부모 키에 대한 충분한 액세스 권한이 없기 때문에 이 플래그가 설정되고 키 만들기 또는 값 설정 작업이 실패하면 레지스트리가 작업에 실패합니다. 이 플래그가 명확하면 레지스트리는 가상 저장소에 키 또는 값을 쓰려고 시도합니다. 호출자는 부모 키에 바로 KEY_READ 있어야 합니다.
REG_KEY_RECURSE_FLAG 이 플래그를 설정하면 레지스트리 가상화 플래그가 부모 키에서 전파됩니다. 이 플래그가 명확하면 레지스트리 가상화 플래그가 전파되지 않습니다. 이 플래그를 변경하면 플래그가 변경된 후에 만든 새 하위 키에만 영향을 줍니다. 기존 하위 키에 대해 이러한 플래그를 설정하거나 지우지 않습니다.

 

다음 예제에서는 FLAGS 옵션과 함께 Reg.exe 명령줄 유틸리티를 사용하여 키에 대한 가상화 플래그의 상태를 쿼리하는 방법을 보여 있습니다.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

가상화되는 키에서 감사를 사용하도록 설정할 때마다 키가 가상화되고 있음을 나타내기 위해 새 가상화 감사 이벤트가 생성됩니다(일반적인 감사 이벤트 추가). 관리자는 이 정보를 사용하여 시스템에서 가상화의 상태 모니터링할 수 있습니다.

사용자 계정 컨트롤을 사용하여 시작

사용자 계정 컨트롤 이해 및 구성

최소 권한 환경에서 애플리케이션에 대한 개발자 모범 사례 및 지침