wince 레지스트리 관련 토론

등록표에 저장된 이 장은 주로 Windows CE에 대한 설명입니다.NET 레지스트리 관련 기술.1. 객체 저장소(object store) 객체 저장소는 Windows CE의 기본 데이터 저장 메커니즘입니다.새로 만든 커널에는 기본적으로 대상 메모리가 포함되어 있습니다.개체 저장소의 본질은 RAM에 파일 시스템을 만들고 파일을 RAM에 저장하는 것이다. 이 파일들은 ROM에서 유래한 것이다.장치가 시작되면 부트 프로그램은 ROM의 커널 파일을 압축을 풀고 RAM에 저장합니다.'/윈도우즈' 디렉터리는 대상을 기반으로 저장됩니다.대상 저장의 특징은 파일을 압축하고 사무 메커니즘(데이터베이스에 있는 사무 메커니즘과 비슷)을 지원하며 데이터 I/O가 상대적으로 빠르다는 것이다.
  • A, 개체 저장소의 개체 유형은 파일, 디렉토리, 데이터베이스, 레코드, 데이터베이스 볼륨입니다.CE는 각 객체에 하나의 객체 ID(CEOID)를 할당합니다.객체에 액세스하거나 작업하려면 객체 ID를 받아야 합니다.
  • B, CE는 모든 개체 저장소의 파일을 자동으로 압축할 수 있습니다(CE는 OEM 설정에서 파일을 자동으로 압축할 수 있는지 여부를 설정할 수 있습니다).그래서 파일에는 압축되거나 압축되지 않는 로고가 없지만 이 파일이 ROM에 존재하는지 RAM에 존재하는지 표시하는 로고가 있습니다.한 파일의 최대 길이는 4GB입니다.
  • C, CE는 ROM 기반 파일 시스템, RAM 기반 파일 시스템, FAT 파일 시스템 등 세 가지 파일 시스템을 제공합니다.

  • 2. 등록표(registry)CE에서 등록표는 다른 윈도우즈 운영체제에서 등록표의 개념과 구조가 기본적으로 같다.
  • A, CE 아래 등록표 제한: 키 이름의 최대 길이는 255문자이다.최대 4KB 데이터하위 키 깊이의 최대 값은 16층입니다.
  • B, 루트 키 HKEYCLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS.
  • C, 작업 레지스트리 함수:
  • i. RegOpenKeyEx 열기 및 RegCreateKeyEx 만들기
  • ii. RegQueryValueEx 읽기 및 RegSetValueEx 쓰기
  • ii. 열거 입구 또는 하위 키 RegEnumValue, RegEnumKeyEx
  • iv. 포털 또는 하위 키 삭제 RegDeleteValue, RegDeleteKey
  • v. RegCloseKey 닫기

  • 3. CE 아래 레지스트리 유형은 RAM 기반 레지스트리와 HIVE 기반 레지스트리로 나뉜다.
     
  • A, RAM 기반 레지스트리, 객체 기반 저장소(oject storage) 레지스트리라고도 합니다.레지스트리 데이터를 모두 RAM에 저장할 수 있습니다.
  • i. CE v1.0부터 CE까지.NET 이전에는 이 기술로만 레지스트리를 저장했습니다.새로 만든 모든 핵은 기본적으로 이 기술로 등록표를 저장합니다.
  • ii. 시동을 걸지 않고 자주 열 가동하는 설비에 적합하다.시스템 종료 시 RAM에 저전력 공급전원이 꺼지면 디바이스를 재부팅하면 레지스트리 데이터가 커널에서 RAM으로 다시 읽힙니다.물론 이전에 저장한 사용자 데이터는 이미 잃어버렸다.
  • ii. RAM 기반 레지스트리도 레지스트리 데이터를 영구적으로 저장할 수 있습니다.CE는 두 가지 메커니즘을 제공합니다.
  • 1) 첫 번째 메커니즘의 디자인 사고방식은 장치가 닫히기 전에 RegCopyFile 함수를 호출하여 전체 등록표 데이터를 파일 형식으로 영구 메모리에 저장하는 것이다.디바이스를 다시 시작하면 RegRestoreFile 함수를 호출하여 파일을 모두 RAM으로 읽습니다.그러나 복구된 등록표 데이터를 유효하게 하기 위해서는 한 번의 열 가동이 필요하다.그래서 시동을 걸 때마다 열 시동을 한 번씩 더 낸다.다행히 열 가동이 매우 빠르고 몇 초의 시간이 걸렸다. 
  • 2) 다른 메커니즘은 이전 메커니즘의 두 번의 가동이 필요한 단점을 피할 수 있다.하지만 단점도 있다.OEM(원시 장치 제조업체)은 OAL 레이어에서 Write Registry ToOEM and ReadRegistry FromOEM 두 함수를 작성할 수 있으며, 커널은 시작할 때 자동으로 ReadRegistry FromOEM 함수를 호출하여 레지스트리 데이터를 읽을 수 있습니다.응용 프로그램이 RegFlushKey 함수를 호출할 때 이 함수는 WriteRegistryToOEM 함수를 호출하여 영구 메모리에 등록표 데이터를 쓴다.이 메커니즘은 두 차례의 가동의 결함을 피했다.그러나 문제는 커널이 시작되었을 때 ReadRegistryFromOEM을 호출하기 전에 파일 시스템 드라이버가 불러오지 않았기 때문에 파일을 열고 읽을 수 없습니다.CE 도움말 파일에서 해결책은 영구 스토리지에서 데이터를 읽는 코드를 ReadRegistryFromOEM에 추가하는 것입니다.도움말에서 말하는 것은 파일 시스템 드라이버가 아직 불러오지 않았기 때문에 ReadFile을 호출하는 것이 이렇게 간단한 것이 아닙니다.
  • 3) 개인의 건의: RAM 기반의 등록표 보존 메커니즘을 사용하고 등록표 데이터를 영구적으로 보존해야 한다면 첫 번째 메커니즘을 사용하는 것이 비교적 쉽다.


  • B, HIVE 기반 레지스트리등록표 데이터의 전부 또는 일부를 영구 메모리에 저장하는 데 사용합니다.
  • i. CE에서 왔어요.NET가 도입한 신기술.항상 차가운 가동을 하고 덥지 않은 가동을 하는 설비에 적합하다.
  • ii.다중 사용자 정보를 각각 저장할 수 있습니다.한 사용자가 로그인할 때, 이 사용자의 등록표 데이터를 불러오고, 로그아웃할 때 이 사용자의 등록표 데이터를 마운트 해제합니다.
  • ii. HIVE는 하위 키, 키 값, 데이터를 포함하는 키를 가리킨다.레지스트리 데이터를 저장하거나 로드하는 단위입니다.시스템 HIVE(system hive), 사용자 HIVE(uer hive), 부트 HIVE(boot hive)로 나뉜다. 
  • 1) 시스템 HIVE에는 시스템 설정 정보가 포함되어 있습니다.특정 저장 레지스트리에서 HKEYLOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_USERS 키를 누르면 모든 데이터가 표시됩니다.시스템 HIVE를 저장하는 파일의 경로는 [HKEY LOCAL MACHINE/init/BootVars]에서 키 이름은 "systemhive"이고 키 값은 파일의 경로입니다.기본값은/Documents and Settings/system.hv입니다.
  • 2) 사용자 HIVE에는 사용자 정보가 포함되어 있습니다.특정 저장 레지스트리에서 HKEYCURRENT_USER 키를 누르면 모든 데이터가 표시됩니다.사용자 HIVE를 저장하는 파일의 경로는 [HKEY LOCAL MACHINE/init/BootVars] 아래 키 이름은 "profiledir"이고 키 값은 모든 사용자 HIVE의 공동 디렉토리입니다.기본값은/Documents and Settings이며 이 디렉토리에는 각 사용자 이름의 하위 디렉토리가 포함됩니다.하위 디렉터리에 파일이 있습니다. 기본 파일 이름은user입니다.hv.
  • 3) HIVE를 ROM(커널)에 저장하도록 부트합니다.구체적인 저장 내용은 시스템 HIVE와 같습니다.커널의 압축을 풀고 레지스트리를 로드할 때 시스템은 먼저 부트 HIVE 데이터를 읽어내어 HIVE가 영구 메모리를 포함하는 드라이버와 파일 시스템의 드라이버를 부트한다. 이 드라이버가 로드되면 시스템 HIVE가 로드되고 HIVE가 풀리도록 부트한다.부트 HIVE가 커널에 포함되어 있기 때문에 새로운 커널을 만들면 부트 HIVE의 데이터가 시스템 HIVE와 다를 수 있습니다.그러면 시스템은 어떤 버전을 불러오는 것이 좋을까요?이를 위해 CE는 각 코어를 생성할 때 플래그를 지정합니다.시스템 HIVE에도 이러한 표지가 존재한다. 안내 HIVE를 불러올 때 안내 HIVE와 시스템 HIVE의 표지가 같지 않으면 시스템은 시스템 HIVE 파일을 삭제하고 파일을 다시 만들고 안내 HIVE에서 데이터를 복사한다.

  • iv. 레지스트리 데이터 영구 저장 Windows CE.NET는 새로운 등록표 보존 기술인 HIVE 기반의 등록표를 채택하여 정말 흥분된다. 그 전에 WindowsCE를 기반으로 한 설비는 대부분RAM에 전기를 공급하는 방식으로 등록표 데이터를 보존했다. RegCopyFile 함수를 통해 영구적으로 보존할 수도 있지만 시작할 때 다시 한 번 열기를 시작해야 하기 때문에 HIVE 기술을 바탕으로 시작할 때 시스템은 자동으로 데이터를 불러와 열기 시작의 번거로움을 면할 수 있다.또한 커널이 업데이트되고 업그레이드될 때 영구 메모리에 저장된 시스템 HIVE 파일이 새 커널에 영향을 미칠까 봐 걱정하지 마십시오. 시스템은 자동으로 오래된 시스템 HIVE 파일을 판단하고 삭제합니다.이러한 기술을 보유해야만 CE 기반 제품이 진정한 컴퓨터라고 할 수 있다.참고: HIVE 기반 레지스트리의 구현에 대해서는 설명하지 않습니다.


  • 다음은 RegCopyFile 및 RegRestoreFile 사용법에 대한 간략한 설명입니다.///RAM 기반 레지스트리를 사용하여 RegCopyFile 및 RegRestoreFile///를 사용하여 레지스트리 데이터를 영구적으로 저장합니다.
    #include <Pkfuncs.h>
    #include <winbase.h>
    
    CString  strRegBackup = L"//hard disk//RegBackup.reg";
    CString  strTmp      = L"//windows//temp.reg";
    
    //////// 。 。  
    if(! RegCopyFile(strTmp))     /// , temp.reg 。
    {
    	return FALSE;  
    }
    
    if(! CopyFile(strTmp, strRegBackup, FALSE))  /// temp.reg RegBackup.reg
    {
    	return  FALSE;
    }
    
    ///////// 。 。
    if(! CopyFile(strRegBackup, strTmp, FALSE))
    {
    	return  FALSE;
    }
    
    if(! RegRestoreFile(strTmp))  /// 
    {
    	return  FALSE;
    }
    
    if(! KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL)) /// 
    {
    	return  FALSE;
    }
    

    좋은 웹페이지 즐겨찾기