Vista에서는 일반 사용자(Administrators 그룹에 속한 사용자 포함)는 시스템에서 보호되는 디렉토리 또는 레지스트리에 직접 쓰지 못하도록 하고 있다. 보호받는 디렉토리와 레지스트리 경로는 다음과 같다.
(%SYSTEMROOT%, %PROGRAMDATA%, %PROGRAMFILES%\(서브디렉토리)
HKEY_LOCAL_MACHINE\SOFTWARE
그럼, 기존에 이런 곳에 접근해서 데이터를 저장하고 있는 어플리케이션은 모두 사용할 수 없게 되는 것인가.
Vista에서는 "임시"로 이런 어플리케이션의 호환성을 위하여 가상화 기술을 도입하고 있다. 어플리케이션에서 보호받는 디렉토리와 레지스트리에 데이터를 쓰려고 하면 Vista에서는 런타임시 그 경로를 사용자별 경로로 자동으로 변경시켜 준다.
%SYSTEMROOT%, %PROGRAMDATA%, %PROGRAMFILES%\(서브디렉토리)
Redirect to: %LOCALAPPDATA%\VirtualStore
HKEY_LOCAL_MACHINE\SOFTWARE
Redirect to: HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\<Application Registry Keys>
어플리케이션에서는 보호받는 디렉토리, 레지스트리에 값을 쓰지만, 런타임시 Vista에서는 그것을 사용자별로 각자의 경로로 리다이렉트해서 그곳에 값을 쓴다는 얘기다. 다음 샘플 프로그램을 보자.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
string filePath = System.IO.Path.Combine(programFiles, "dalbong2.txt");
Console.WriteLine(filePath);
//빈 파일 생성
System.IO.FileStream stream = System.IO.File.Create(filePath);
stream.Close();
Console.Read();
}
}
}
이 프로그램을 실행하는 계정은 물론 일반 사용자 계정이라고 하자. Program Files의 물리적 경로와 "dalbong2.txt"를 결합해서 Console로 출력한다. 그 값은 다음과 같다.
[그림] 프로그램상에서 인식하는 파일 경로
Program Files 폴더에 dalbong2.txt를 생성하겠다는 것인데, 그러나 실제 파일은 이곳에 저장되지 않는다. 프로그램으로부터 이 요청을 받으면 Vista에서는 다음 경로로 리다이렉트를 해서 파일을 저장한다.
[그림] 실제 저장 경로
파일이 실제 생성된 곳의 경로는 그림에서처럼 보는 바와 같다. 일반 사용자는 Program Files 폴더에 접근할 수 없기 때문에 에러가 발생하고 Vista에서는 가상화를 통해서 사용자별로 가상 디렉토리에 파일을 생성하게 되는 것이다. 그러나 만일 실행 파일을 관리자 권한으로 실행시킨다면 실제 "C:\Program Files\dalbong2.txt"로 저장될 것이다.
가상화는 앞에서 언급한 대로 레거시 어플리케이션과의 호환성을 위해서 취하고 있는 "임시" 기능이다. 64비트의 환경에서는 이 기능은 사라진다.
'IT 살이 > 03. 관리 - 보안 관리' 카테고리의 다른 글
Documents and Settings 이 보이지 않는다. (0) | 2009.04.19 |
---|---|
내 PC의 UAC정책 설정 내용을 보자. (0) | 2009.04.19 |
기본 제공 관리자(built-in Adminitrator) 계정을 보여줘 (0) | 2009.04.19 |