레지스트리
: 레지스트리는 애플리케이션과 시스템 요소들이 데이터를 저장하고 얻기위해 사용하는 시스템으로 정의된 데이터베이스이다.
1. 레지스트리에 대해서
: 레지스트리는 데이터를 이진화된 파일들로 저장한다. 레지스트리 데이터를 조작하기 위해서 애플리캐이션은 레지스트리 함수를 사용해야만 한다.
이 관점은 애플리케이션이 데이터를 액세스하고 조작하기 위해 사용하는 레지스트리와 함수들이 준비되어 있다는 것을 말한다.
레지스트리에 저장된 데이터는 사용된 플랫폼에 따라서 달라진다. 이 관점은 레지스트리 항목들이 어떤 플랫폼에든 존재할 수 있다는 뜻을 포함한다.
1) 레지스트리의 구조
: 레지스트리는 조직화된 트리구조로 데이터를 저장한다. 트리구조에서 각각의 마디는 “키”라고 불리운다. 각각의 키는 하위키와 “값”이라고 불리는 데이터항목들을 가질수 있다.
때로는, 키의 존재가 애플리캐이션이 요구하는 모든 데이터가 되기도 한다. 다른때는 애플리캐이션은 키를 열고 그것과 관련된 값을 사용하기도 한다. 하나의 키는 많은 값을 가질수 있고, 값은 어떤 형태로든 있을수 있다.
각 키는 하나 또는 그 이상의 인쇄가능한 ANSI 캘릭터들을 구성하는 이름을 가지고 있다. (캘릭터들은 32부터 127까지의 값을 가지고 있다.)
키의 이름들은 여백, 백슬러쉬, 또는 다른 특수문자들을 포함하지 않는다. 피리어드(.)로 시작되는 키이름들은 인정되어진다. 각 하위키들의 이름은 조직화된 자신의 바로 앞 상위키 이름에 관련된 이름을 갖는 특징이 있다.
비록 그 값들은 다른 언어들로 되어 있을지라도, 키 이름들은 다른 언어들로 국한되지 않는다.
2) 레지스트리 저장공간
: 비록 애프리캐이션이 레지스트리에 저장할수 있는 데이터의 형태와 사이즈에 약간의 기술적인 제한이 있지만, 시스템을 효과적으로 작동시키기 위한 유용한 가이드 라인이 존재한다. 어떤 애플리캐이션은 형태데이터와 초기화데이터를 레지스트리에 저장해야 할것이지만, 다른 데이터들은 다른 어떤 곳에 저장되어야 한다.
일반적으로, 1또는 2키로 바이트 이상으로 구성된 데이터는 값으로 저장되기 보다는 레지스트리에서 파일로 저장되고 키를 이용해 조작되어야 한다.
레지스트리에서 큰 데이터 조각을 복사하는 대신에, 애플리캐이션은 데이터를 파일로서 저장하고 파일에서 읽어와야 한다. 실행가능한 이진화 데이터는 결코 레지스트리에 저장되어서는 않된다. 값의 항목들은 키보다 적은 레지스트리를 사용한다. 공간을 아끼기 위해, 애플리캐이션은 어떤 구조로서 비슷한 데이터를 함께 그룹화하고, 그 구조의 맴버들을 분리된 키값으로 저장하기 보다는, 그 구조 자체를 저장하게 된다.
(이진화 형태로 데이터를 저장하는 것은 애플리캐이션이 하나의 값으로 데이터를 저장하도록한다. 그렇지 않다면 여러 개의 적합하지 않은 형태들로 구성될것이다.)
3) 미리정의된 키들
: 애플리캐이션은 레지스트리에 데이터를 추가시키기 전에 키를 열어야만 한다. 키를 열기 위해서, 애플리캐이션은 레지스트리에서 이미 열려있는 다른 키에 핸들을 제공해야만 한다. 시스템은 항상 열려있는 표준 핸들을 정의한다. 애플리캐이션은 이런 미리 정의된 핸들들을 레지스트리에 항목들로 사용할수 있다.
시스템은 레지스트리의 근원에 미리 정의된 두개의 키(HKEY_LOCAL_MACHINE and HKEY_USERS) 를 제공한다. 부가적으로, 시스템은 HKEY_LOCAL_MACHINE 의 하위키인 HKEY_CLASSES_ROOT 와 HKEY_USERS 의 하위키인 HKEY_CURRENT_USER 를 정의한다. 레지스트리 헨들은 레지스트리의 모든 Win32 실행을 위해 값이 정해져있다. 비록, 그 헨들들의 사용이 플랫폼에서 플랫폼으로는 다르더라도 말이다.
또한, 다른 미리 정의된 핸들들은 특별한 플랫폼들을 위해서 정의되어져 있다.
미리 정의된 키들은 애플리캐이션이 레지스트리내를 돌아다니는 것을 돕고, 시스템 관리자가 데이터의 카테고리들을 조작하도록 하는 툴을 개선시킬수 있도록 해준다. 데이터를 레지스트리에 추가시키는 애플리캐이션은 언제나 미리 정의된 키들의 프레임웍 안에서 동작해야만 한다. 그래야, 관리 도구들이 새로운 데이터르 찾고 사용할수 있다.
4) 데이터 카테고리
: 데이터를 레지스트리에 넣기 전에, 애플리캐이션은 그 데이터를 두개의 카테고리로 나
누어야 한다.(컴퓨터에 관한 구체적인 데이터, 사용자에 관한 구체적인 데이터)
이렇게 구별함으로써, 애플리캐이션은 여러명의 사용자를 지원할수 있고, 네트워크 위로 사용자의 구체화된 데이터를 찾아낼수 있으며, 다른 장소들에서 장소 독립적인 사용자의 프로필데이터를 사용할수 있다. (사용자의 프로필은 모든 사용자을 위해 저장된 윤곽데이터의 세트이다.)
애플리캐이션이 인스톨될 때, HKEY_LOCAL_MACHINE 키 아래에 컴퓨터의 구체적인 데이터가 기록 되어야 한다. 특히, 애플리캐이션은 아래와 같은 예들처럼 회사명, 제품명, 버전등을 위한 키들을 만들어야 한다.
HKEY_LOCAL_MACHINE\Software\MyCompany\MyProduct\1.0
만약 애플리캐이션이 OLE를 지원한다면, 아래의 위치에 데이터를 기록해야 한다.
HKEY_LOCAL_MACHINE\Software\Classes.
애플리케이션은 사용자에 관한 구체적인 데이터를 HKEY_CURRENT_USER 키 아래에 밑의 예처럼 기록해야 한다.
HKEY_CURRENT_USER\Software\MyCompany\MyProduct\1.0\...
5) 키를 열고, 생성하고, 닫기
: 애플리케이션이 레지스트리에 데이터를 추가시키기 전에, 그것은 키를 열거나 생성해야만 한다. 키를 열거나 만들기 위해서, 애플리캐이션은 언제나 현재 열린키의 하위키로서 그 키를 조회하여야 한다. 아래의 미리 정의된 키들은 언제나 열려있다. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_USERS, and HKEY_CURRENT_USER
애플리캐이션은 RegOpenKey 또는 RegOpenKeyEx 함수를 키를 여는데 사용하고, RegCreateKey 또는 RegCreateKeyEx 함수를 키를 생성하는데 사용한다.
애프리캐이션은 RegCloseKey 함수를 키를 닫고 그것이 레지스트리에 포함하고 있는 데이터를 작성하는 사용한다. RegCloseKey 함수는 반환하기 전에 꼭 데이터를 레지스트리에 작성할 필요는 없다. 그것은 하드디스크에 쏟아진 정보들을 저장하기위해 수초의 시간이 걸린다. 만약, 애플리캐이션이 하드디스크에 레지스트리 데이터를 명확하게 작성해야만 한다면, RegFlushKey 함수를 사용해야만 한다. 그렇지만 RegFlushKey 함수는 많은 시스템 리소스를 사용하므로, 단지 절대적으로 필요할때만 호출되어야 한다.
6) 레지스트리 데이터를 작성하고 삭제하기
: 애플리캐이션은 RegSetValue 또는 RegSetValueEx 함수를 값과 그것의 데이터를 키와 관련시키기위해 사용할수 있다. RegSetValue 함수는 단지 REG_SZ_TYPE의 값을 가지는 스트링을 가지고 동작하며, RegSetValueEx함수는 어떤 데이터 형을 가지고 있더라도 값을 작성할수 있다. 이 함수들은 또한 키와 그것의 값을 동시에 생성할수 있다.
키에서 값을 삭제하기 위해, 애플리케이션은 RegDeleteValue 함수를 사용한다. 키를 삭제하기 위해서는 RegDeleteKey 함수를 사용한다. 삭제된 키는 그것의 최근 핸들이 닫히기 전까지 제거되지 않는다. 하위키들과 값들은 삭제된 키 아래로는 생성될수 없다.
키의 시큐리티에 관한 정보를 변경하기 위해서, 애플리캐이션은 RegSetKeySecurity 함수를 사용할수 있다.
7) 레지스트리로부터 데이터를 화수하기
: 레지스트리로부터 데이터를 회수하기 위해서, 애플리캐이션은 그것이 특별한 어떤 값을 발견하고, 그 값 또는 그 값과 관련된 값으로부터 데이터를 회수하기 까지, 전형적으로 키의 그 하위키를 열거한다. 애플리캐이션은 RegEnumKey 함수 또는 RegEnumKeyEx 함수를 주어진 키의 하위키들을 열거하기위해 사용할수 있다. RegEnumKeyEx 함수는 하위 키와 그것의 클래스를 반환하지만, RegEnumKey 함수는 단지 하위키만을 반환한다.
특별한 하위키에 대해서 세부화된 데이터를 회수하기 위해서, 애플리케이션은 RegQueryInfoKey 함수를 호출한다. RegGetKeySecurity 함수는 디스크립터가 보호하고 있는 키의 시큐리티의 복사본을 회수한다.
애플리캐이션은 RegEnumValue 함수를 주어진 키의 값들을 정열하기 위해 사용할수 있고, RegQueryValue 또는 RegQueryValueEx 함수를 키의 특별한 값을 회수하는데 사용할수 있다. 애플리캐이션은 전형적으로 RegEnumValue 함수를 값의 이름을 정하기 위해 호출하고, RegQueryValueEx 함수를 그 이름들의 데이터를 회수하기 위해 사용한다.
RegQueryValue 함수와 RegQueryValueEx 함수는 그것들이 환경변수들에 관한 확장되지 않은 참조를 처리하는 방법에서 서로 다르다. 만약 이름이 정해지지 않은 값이 확장되지 않은 환경변수(예를 들어, %PATH%) 를 포함한다면, RegQueryValue 함수는 그 변수를 그것의 파라미터중 하나로서 제공된 저장 버퍼내에 확장시킨다. 하지만, RegqueryValueEx 함수는 이것들의 참조를 확장시키지 않는다. (애플리캐이션들은 또한, 환경변수들을 확장시키기 위해서 ExpandEnvironmentStrings 함수르 사용한다.)
8) 레지스트리 파일들
: 애플리캐이션들은 레지스트리의 부분을 파일에 저장시키고, 레지스트리로부터 파일의 내용을 다시 읽을수 있다. 레지스트리 파일들은 큰 데이터가 다루어질 때, 많은 항목들이 레지스트리로 만들어질 때 또는, 데이터가 일시적이고, 읽혀진후 다시 읽혀지지 말아야 할 때 유용하다. 애플리캐이션들이 레지스트리의 부분을 백업하고 저장하는 것은 레지스트리 파일들을 사용하는것과 같다.
키를 저장하고, 그것의 하위키와 값을 레지스트리 파일에 저장하기위해, 애플리케이션은 RegSaveKey 함수를 사용한다. 레지스트리 파일을 레지스트리에 다시 작성하기위해, 애플리케이션은 RegLoadKey 함수, RegReplaceKey 함수 또는 ,RegRestoreKey 함수를 사용한다.
RegLoadKey 함수는 애플리케이션의 컴퓨터, 또는 원거리 컴퓨터를 호출할 때HKEY_USERS 또는 HKEY_LOCAL_MACHINE 아래의 어떤 하위키 내의 특별한 파일로부터 레지스트리 데이터를 읽는다.
그 함수는 만약 하위키가 존재하지 않는다면, 그것을 생성하게 된다. 이 함수를 호출한후, 애플리케이션은 RegUnLoadKey 함수를 그것의 이전상태에 레지스트리를 다시 저장하기위해 사용한다.
RegReplaceKey 함수는 키와 그것의 특별한 파일내에 포함된 데이터와 함께 레지스트리내의 모든 하위키, 그리고 값들을 레지스트리내에 다시 위치시킨다. 그 새로운 데이터는 시스템이 다음번에 다시 시작될 때부터 효력을 갖는다.
RegRestoreKey 함수는 애플리케이션의 컴퓨터 또는 원거리 컴퓨터를 호출할 때 어떤 키 내의 특별한 파일로부터 레지스트리 데이터를 읽는다. 이 함수는 파일내에 최상위 레벨의 키를 따라오는 하위키와 값들을 가지고 있는 어떤 키 아래로 그 하위키와 값들을 다시 위치시킨다.
'■ 프로그래밍, 개발' 카테고리의 다른 글
### 파일 버젼 얻어 오기 GetFileVersion (0) | 2014.01.31 |
---|---|
문자열 변환 [아스키 유니코드] ASCII <-> UNICODE (0) | 2014.01.31 |
리스트 박스안에 긴 화일명 넣기 (0) | 2014.01.31 |
ActiveX 컨트롤로부터 URL 알아내기 (0) | 2014.01.31 |
VFW 의 함수를 이용한 캠영상 얻어오기 구현 (0) | 2014.01.31 |
댓글