반응형
레지스트리 


윈도우는 어플리케이션과 시스템 컴포넌트를 위한 구성 정보를 저장하고, 검색하기 위해 '레지스트리' 라는 데이터베이스를 이용한다. 

레지스트리는 Tree 형태로 존재하며 각각의 노드(Node)를 키(Key)라고 부른다. 




위의 그림에서 선택된 MountedDevices 키는 SYSTEM 의 하위 키이고, 자신의 키 밑에 서브키를 가질 수 있다.(그림상에서는 없다.) SYSTEM 은 서브키 (Sub Key)로 ControlSet001ControlSet002CurrentControlSet 등을 가지고 있다.

각 키를 선택하면 오른쪽 화면에 값 (Value) 이 뜬다. Value는 Name과 Data로 구성된다. 그림에서 MountedDevices 키는 여러개의 값들을 가지고 있다. \DosDevices 로 시작하는 의 이름을 가지고 있으며 이름과 연결된 데이터는 REG_BINARY 형태로 저장되어 있다.



레지스트리를 수정하려면, 우선 키를 열어야 한다. 오픈되지 않은 키는 무단으로 수정하거나, 제거하거나, 서브키를 추가할 수 없다. 키를 열려면, 레지스트리에 존재하는 이미 열려진 다른 키를 인자로 제공해야 한다. 윈도우는 최초의 Parent Key 를 미리 정의 해 두고 이 키를 항상 열어둠으로써 레지스트리를 수정할 수 있도록 한다.


 
1. HKEY_CLASSES_ROOT

- 이 루트 키에 속하는 레지스트리는 윈도우즈에서 사용하는 파일의 타입과, 타입과 관계된 속성을 저장하고 있다. Shell 과 COM 어플리케이션이 HKCR 아래에 있는 키를 이용한다.

2. HKEY_CURRENT_USER

- 현재 사용자의 특성들이 저장 되어 있다. 프린터, 네트워크 정보, 프로그램 그룹, 응용프로그램 등의 세팅 정보를 담고 있다.

3. HKEY_LOCAL_MACHINE

- 현재 컴퓨터의 물리적(하드웨어) 정보를 담고 있다.

4. HKEY_USERS

-  모든 유저에 대한 HKEY_CURRENT_USER 값을 가지고 있으며 새로 유저가 생성될때 해당 유저의 HKCU 값을 설정 해줄 디폴트 값을 가지고 있다.

5. HKEY_CURRENT_CONFIG

- 하드웨어의 물리적 상태를 설명한다. 단, 이 레지스트리에 설명하는 것은 현재 구성 정보와, 표준 구성 정보의 차이만을 설명한다. 하드웨어의 표준 구성 정보는 HKLM \ Software, HKLM \ SYSTEM 에 저장 되어 있다.


이외에도

HKEY_CURRENT_USER_LOCAL_SETTINGS
HKEY_PERFORMANCE_DATA
HKEY_PERFORMANCE_NLSTEXT
HKEY_PERFORMANCE_TEXT 

등이 있으나 설명하지 않겠다. 자세한 내용은 Predefined Keys 를 참고하라.








64비트 운영체제에서 32비트 프로그램의 레지스트리


윈도우 64비트는 32비트 프로그램을 실행하기 위해(32비트 윈도우에서 16비트 프로그램을 위해 그랬듯이) 호환성을 제공한다.  WOWWindows On Windows 가 바로 그것이다. 

WOW64는 32비트 프로그램을 에뮬레이션 해주어 64비트 운영체제에서 돌아갈 수 있도록 해준다. 그러나, 이것은 유저 모드 응용프로그램에 한해서이고 32비트 커널모드 드라이버는 64비트로 포팅 되어야 한다. 또한 16비트 프로그램은 더이상 64비트에서 돌아가지 않는다.

64비트 응용프로그램과 32비트 프로그램은 기본적으로 서로 다른 폴더에 저장되고, 레지스트리 또한 따로 관리된다. 아래는 Windows7 64bit 에서 레지스트리를 나타낸 것이다.



WOW6432Node 키가 존재한다. 64비트 응용 프로그램 HKLM \ SOFTWARE \ Sonic 을 접근하려고 하면, 그 위치 그대로 접근하지만 만약 32비트 응용 프로그램이 프로그램상에서 HKLM \ SOFTWARE \ Sonic 에 접근하려고 하면, 윈도우 운영체제는 레지스트리 콜을 인터셉트해서 올바른 32비트 프로그램의 레지스트리 경로, 즉 HKLM \ SOFTWARE \ Wow6432Node \ Sonic 을 열어준다. 이 과정을 Registry Redirector 라고 부른다. 이 과정은 투명하여 프로세스는 알아 챌 수 없다. 

64비트 프로세스가 32비트 레지스트리를 접근하기 위해서는 레지스트리 콜 과정에서 다음과 같은 플래그를 지정 해 주어야 한다.

KEY_WOW64_32KEY (0x0200)

반대로, 32비트 프로세스가 64비트 레지스트리를 접근하기 위해서는 레지스트리 콜 과정에서 다음과 같은 플래그를 지정 해 주어야 한다.

KEY_WOW64_64KEY (0x0100)

이 두가지 플래그 모두 동시에 세팅 될 수 있지만 그럴 경우 함수의 동작은 정의되지 않았으며,  ERROR_INVALID_PARAMETER 반환 값과 함께 함수는 리턴된다.



Registry Reflection 또한 Windows 64비트 에서 제공하는 기능이다. 어떤 레지스트리 값은 64비트 응용프로그램 버전와 32비트 응용 프로그램 버전에서 모두 같아야 할 필요성이 있다. 64비트 레지스트리 값과 32비트 레지스트리 값을 동기화 시켜주는 것이 Registry Reflection 이다. 이를 위해 윈도우는 "last writer wins" 규칙을 적용한다. 아래는 그 예다.

- 사용자는 64비트 오피스 프로그램을 설치한다. .doc 확장자에 64비트 버전의 Word.exe가 연결된다.
   .doc 가 실행되면, 64비트 Word.exe가 실행된다.

- 사용자가 32비트 오피스 프로그램을 설치한다. .doc 확장자에 32비트 버전의 Word.exe가 연결되고, Reflector는      64비트 버전의 Word.exe 에서 사용하는 레지스트리 값에 32비트 버전의 Word.exe에서 사용하는 값을 복사한다.
  .doc 가 실행되면, 32비트 Word.exe가 실행된다.

- 사용자가 62비트 오피스 프로그램을 설치한다. .doc 확장자에 62비트 버전의 Word.exe가 연결되고, Reflector는      32비트 버전의 Word.exe 에서 사용하는 레지스트리 값에 64비트 버전의 Word.exe에서 사용하는 값을 복사한다.
   .doc 가 실행되면, 64비트 Word.exe가 실행된다.


- 출처

http://egloos.zum.com/anster/v/2152508

반응형
Posted by tislqhf

블로그 이미지
개인적인 공부자료 정리하는 공간
tislqhf

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함