I. 레지스트리의 저장 Windows 9x/Me에서 레지스트리는 Windows 폴더에 두개의 숨김 속성 파일(USER.DAT, SYSTEM.DAT)에 저장되어 있다. Windows NT/2K/XP의 경우 레지스트리는 여러개의 하이브로 저장되며, 이들 하이브들은 %SystemRoot%\system32\config와 %USERPROFILE%에 존재한다주1.
II. 레지스트리의 구조 레지스트리는 하드 디스크의 디렉토리와 같은 구조를 가지고 있다. 각각의 가지(레지스트리 편집기에서 폴더 아이콘으로 표시되는)는 키라고 부르며, 각각의 키는 하위키를 포함할 수 있으며, 각각의 키는 값을 포함할 수 있다. 이 값에 레지스트리에 저장되는 실제 정보가 저장된다. 프로그래밍과 비교하면 값이 변수명을, 데이타 값이 변수값을 나타낸다. 가장 많이 사용되는 데이타 유형은 문자열(REG_SZ), 이진값(REG_BINARY), 단어(REG_DWORD)라는 세가지 형태의 값(Windows NT/2K/XP의 경우, 다중 문자열 값(REG_MULTI_SZ), 확장 가능한 문자열 값(REG_EXPAND_SZ)이며, 이 들중 어떠한 형태의 값이 사용되는지는 각각의 환경에 의존한다.
레지스트리에는 6개의 주된 가지(Windows NT/2K/XP에서는 5개)가 존재하며, 각 가지의 의미는 다음과 같다.
- HKEY_CLASSES_ROOT
- OLE를 인식하는 응용 프로그램을 위한 OLE 정보와 모든 파일 유형 정보가 저장된다.
- HKEY_CURRENT_USER
- 현재 로그인한 사용자를 위한 정보가 저장되며, HKEY-USERS의 일부분이다.
- HKEY_LOCAL_MACHINE
- 컴퓨터에 설치된 하드웨어와 소프트웨어대한 모든 정보가 저장된다. 여러개의 하드웨서 설정 정보를 지정할 수 있으므로 현재 하드웨어에대한 정보는 HKEY_CURRENT_CONFIG에 저장된다.
- HKEY_USERS
- 컴퓨터를 사용하는 사용자 각각에대한 속성(색상, 제어판 설정등)이 저장된다. Windows 9x/Me에서는 여기에 현재 로그인한 사용자의 정보가 저장된다. Windows NT/2K/XP의 경우 새롭게 추가되는 사용자에대한 기본 템플릿이 저장된다.
- HKEY_CURRENT_CONFIG
- 현재 하드웨어 설정이을 저장된다. HKEY_LOCAL_MACHINE의 일부분이다.
- HKEY_DYN_DATA (Windows 9x/Me 만)
- Windows PNP 하위시스템에 사용하위한 정보가 저장된다. HKEY_LOCAL_MACHINE의 일부분이다.
III. 레지스트리 편집기의 사용 레지스트리 편집기(regedit.exe)는 레지스트리를 수정/편집할 수있도록 Windows와 함께 배포된다. 레지스트리 편집기를 실행하면 두개의 분할된 패널을 볼 수 있다. 좌측 패널은 폴더 트리(위의 레지스트리 구조를 보기 바란다)이며, 우측 패널은 선택된 폴더(키)의 내용(값)이다.
가지를 확장하기위해 해당 폴더 좌측의 플러스 기호([+] )를 클릭하거나 해당 폴더를 두번 클릭한다. 키(폴더)의 내용을 보기위해 원하는 키를 클릭하고, 우측에 열거된 값을 조사하면 된다. 편집 메뉴의 새로만들기를 선택함으로서 새로운 키나 값을 추가할 수 있다. 파일의 이름을 변경하는 것과 동일한 방법(원하는 대상에 마우스 우측 버튼을 클릭하고, 이름 바꾸기를 선택하거나 원하는 대상을 느리게 두번 클릭하거나 키보드상의 F2키를 누름)으로 임의의 값과 거의 모든 키의 이름을 변경할 수 있다. 원하는 키나 값을 클릭하고, 키보드의 Delete 키를 누르거나 마우스 우측 버튼을 클릭하고, 삭제를 선택함으로서 삭제할 수 있다.
IV. 가져오기, 내보내기, 레지스트리 패치 적용하기 레지스트리 편집기로 레지스트리를 편집할 수 있지만, 레지스트리 패치를 사용해서 레지스트리를 변경하는 것이 일반 사용자에게는 훨씬 간단하다. 레지스트리 패치는 .REG 확장자를 갖는 간단한 텍스트 파일로 하나 또는 그 이상의 키나 값을 포함하고 있다. .REG 파일을 두번 클릭하면 이 패치가 레지스트리에 적용된다. 이 것은 자신이나 다른 사람의 레지스트리의 일부분을 백업하거나 공유하는 좋은 방법이다. 레지스트리를 직접 편집하는 것보다 훨씬 간단하며, 덜 위험하기 때문이다.
레지스트리 편집기를 실행함으로서 레지스트리 패치를 생성할 수 있다. 원하는 가지를 선택하고, 파일 메뉴로부터 내보내기를 선택하고, 파일 이름을 지정하고, 확인을 누르면 된다. 또한 레지스트리 패치파일을 메모장을 실행함으로서 볼 수 있다(레지스트리 패치 파일에 우측 마우스 버튼을 클릭하고, 편집을 선택한다). 레지스트리 패치 파일을 두번 클릭(레지스트리의 편집 메뉴로부터 가져오기를 선택)함으로서 레지스트리 패치를 레지스트리에 적용할 수도 있다.
V. REG 파일의 편집 REG 파일을 이용하면 어떤 형태의 데이타이든 추가/삭제가 가능하다. 일반적으로 REG 파일은 다음과 같은 구조를 갖는다.
REG Version ; 이 것은 주석입니다. [레지스트리 키1] @="(기본값)" "값1"="데이타 값1" "값2"="데이타 값2"[레지스트리 키2] @="(기본값)" "값1"="데이타 값1" "값2"="데이타 값2"
레지스트리 파일에서 각 항목의 의미는 다음과 같다.
- REG Version
- 사용되는 레지스트리의 버전이 표시된다.
예: 버전의 예 9x/NT REGEDIT4 2K/XP Windows Registry Editor Version 5.00주2
- ; 이 것은 주석입니다.
- 다른 언어처럼 주석도 사용할 수 있다. 주석은 ;로 시작한다.
- [레지스트리 키]
- 레지스트리의 구조에서 설명한 Root 키로 부터 최종 하위 키까지의
경로이다. 레지스트리에 키를 추가하려면 [레지스트리 키]와 같은
형식을 사용하면 키를 삭제하려면 [-레지스트리 키]와 같은 형식을 사용하면 된다.
예1: 키 삭제 [-HKEY_CLASSES_ROOT\Directory\shell\Winamp.Bookmark] [-HKEY_CLASSES_ROOT\Directory\shell\Winamp.Enqueue] [-HKEY_CLASSES_ROOT\Directory\shell\Winamp.Play]
예2: 키 추가 [HKEY_CURRENT_USER\Control Panel\Cursors] @="바람돌이 소닉"
- 값
- 프로그래밍 언어에서 변수에 해당된다. 변수는 일반적으로 변수명=변수값으로 구성되는데 레지스트리에서도
마찬가지로 값=데이타 값의 형식으로 구성된다. 값중 @로 표시된 값은 기본값을
나타낸다. 값을 추가 하려면 값=데이타 값의 형식을 사용하면 되며, 값을
삭제하려면 값=- 형식처럼 데이타 값을 -로 변경하면
된다.
예: 값 추가 [HKEY_CURRENT_USER\Control Panel\Cursors] @="바람돌이 소닉" "Arrow"="C:\\Windows\\Cursors\\Normal Select.cur" "Help"="C:\\Windows\\Cursors\\Help Select.ani" "AppStarting"="C:\\Windows\\Cursors\\Sonic Background.ani"
예: 값 삭제 [HKEY_CURRENT_USER\Control Panel\Cursors] "Arrow"=- "Help"=- "AppStarting"=-
- 데이타 값
- 데이타 값은 값에 저장되는 실제 값을 의미한다. 데이타의 유형에따라 저장되는 형식은 다르며 데이타 형식에따른 표현 방법은 다음과 같다.
데이타 형 사용형식 예 문자열(REG_SZ) "값"="데이타 값" "Arrow"="C:\\Windows\\Cursors\\Normal Select.cur"주3 단어(REG_DWORD) "값"=dword:헥사값 "Scheme Source"=dword:00000002 이진(REG_BINARY) "값"=hex:hh,hh,hh,hh \ "CacheSize"=hex:ff,ff,00,00 \주4 확장 문자열(REG_EXPAND_SZ) "값"=hex(2):hh,hh,hh,hh \ "ImagePath"=hex(2):73,00,79,00,73 \ 다중 문자열(REG_MULTI_SZ) "값"=hex(7):hh,hh,hh,hh \ "Machine"=hex(7):53,00,79,00,73 \
VI. 레지스트리 편집기의 명령행 옵션 명령행 옵션 부분은 kimdaejeong님의 답글, "레지스트리 내 보내기" 기능을 레지스트리 에디터의 명령행에서 하는 방법이 있나요?을 기초로 작성되었습니다.
Regedit.exe에서 사용할 수 있는 명령행 옵션은 다음과 같다.
사용 형식 | regedit.exe [options] [filename] [regkey] | |||
옵션 | filename | 레지스트리에 병합할 .REG 파일 | ||
Windows 모드 | ||||
/a | ASCII 문자로 내보냄. 여기서 A는 ASCII를 의미(2K 이상) | |||
/d | 지정된 키를 삭제(9x만) | |||
/e | 레지스트리를 파일로 내보님. E는 Export를 의미 | |||
/i | 레지스트리를 파일로부터 가져옴. I는 Import를 의미 | |||
/m | 레지스트리 편집기를 중복해서 뛰움. M는 Multiful을 의미. | |||
/s | 병합시 확인 메시지를 출력하지 않음. S는 Silent를 의미. | |||
9x 명령행 모드 | ||||
/L:system | 사용할 system.dat를 지정(9x만) | |||
/R:user | 사용할 user.dat를 지정(9x 만) | |||
/c | .REG 파일로 System.dat와 User.dat를 생성(9x만) | |||
사용예:
- regedit.exe filename.reg
- 일반적으로 filename.reg를 시스템 레지스트리에 병합할 때 사용된다. /s 옵션을 추가하면 레지스트리 병합을 묻는 확인창이
나타나지 않는다.
예: regedit.exe /s filename.reg
- regedit.exe /e filename.reg [ROOT_KEY]
- 시스템 레지스트리를 filename.reg로 저장한다. [ROOT_KEY]가 지정되지 않으면 모든 시스템 레지스트리를
filename.reg 파일로 저장한다. 따라서 다음 예처럼 가급적 ROOT_KEY를 지정하는 것이 좋다.
예: regedit.exe /e filename.reg HKEY_LOCAL_MACHINE\SOFTWARE\4Developers
- regedit.exe /a filename.reg [ROOT_KEY]
- /e와 동일하다. 다만 /e로 내보낸 경우 Unicode 형식으로 저장되지만 /a를 사용하면 ASCII 코드 형식으로 저장된다.
예: regedit.exe /a filename.reg HKEY_LOCAL_MACHINE\SOFTWARE\4Developers
- regedit.exe /L:system.dat /R:user.dat /c filename.reg
- filename.reg 파일로 현재 폴더에 system.dat와 user.dat 파일을 생성한다. 레지스트리를 조각모음하는 기능이 없는 OSR2의 경우 Windows 모드에서 전체 레지스트리를 내보내고, 명령행으로 부팅한 후 이 방법으로 레지스트리를 다시 생성하면 불필요한 레지스트리 제거할 수 있다주5, 주6.
VII. 레지스트리 매개변수 Windows 탐색기 우측 메뉴에 토탈 코맨더(T) 추가하기를 보면 다음과 같은 항목을 레지스트리에 추가하고 있다.
C:\Program Files\Utilities\Wincmd\totalcmd.exe /O /T /R="%L"
이 명령은 현재 선택한 파일 또는 폴더(%L)를 새탭(/T)으로 우측 패널(/R)에 TC를 활성화(/O)하면서 열도록하는 명령이다. 이 처럼 레지스트리에서는 현재 파일이나 폴더를 인자로 넘겨받기위해 %X 형태나 %XXX% 형태의 매개변수를 사용한다.
이번 팁에서는 레지스트리에서 사용할 수 있는 매개변수에는 어떤 것들이 있으며, 각각 어떤 의미를 가지고 있는지 간단히 설명하겠다.
한가지 주의할 것은 레지스트리 매개변수와 관련된 MS 문서를 찾을 수 없어서 인터넷에서 얻은 정보와 필자가 직접 실험한 결과를 중심으로 설명한 것이므로 실제 의미와는 다소 차이가 있을 수 있다는 점이다.
%1~%9 | 배치 파일에서 온 매개변수이다. %1은 첫번째로 넘겨받는 인자를 의미하며, %2는 두번째로 넘겨 받는 인자, %9는 아홉번째로 넘겨받는 인자를 나타낸다. 긴 파일명의 경우 큰 따옴표로 인용하는 것이 좋다. | |
%L, %D | 현재 파일 또는 폴더를 리턴한다. %1, %L, %D는 모두 같은 값을 리턴한다주7 | |
%S | 현재의 폴더 이름을 리턴한다. 현재의 폴더를 읽을 수 없는 경우 시스템 루트(예: C:\Windows)를 리턴한다. 리턴 형식은 드라이브:\현재의 폴더 이름\1로 경로 끝에 1이 추가된다. 파일을 매개변수로 전달한 경우 해당 파일의 경로명\1을 리턴한다. | |
%* | 이후의 모든 인자를 리턴한다. | |
%I | ItemID 또는 PIDL을 리턴한다. | |
%ENV% | 환경 변수 값을 리턴한다. 데이타 형이 REG_EXPAND_SZ인 경우에만 사용할 수 있다. | |
주2: 레지스트리를 5.0으로 저장하는 경우 Unicode로 저장된다.
주3: 데이타 값에 역슬래쉬를 입력하려면 \\를 사용해야 한다.
주4: 여기서 역슬래쉬(\)는 줄바꿈을 의미한다.
주5: 부팅시 F8을 누르면 나타나는 OS 선택 메뉴에서 Command Prompt를 선택, DOS 모드에서 작업해야 동작한다.
주6: 레지스트리를 내보내고 내보낸 레지스트리로 System.dat와 User.dat를 생성하면 조각 모음이 되는 이유는 레지스트리를 삭제해도 실제 삭제되는 것이 아니라 사용되지 않는 것으로 표시되기 때문이다. 즉, 계속 레지스트리를 추가, 삭제하면 레지스트리가 필요 이상으로 커지게된다.
주7: %1은 8.3 형식의 짧은 파일명을 지원하며, %L&%D는 긴 파일명을 지원한다고 한다. 그러나 필자가 테스트해본 결과 %1, %L, %D 모두 동일한 값을 리턴했다.