Tips: レジストリの使い方


このページでは、レジストリ関係の API の簡単な使用方法と その使用例を示している。

※このページに記述されている内容を利用する前に 必ずここを読むこと。

基本編

応用編


データの取得

レジストリからのデータ取得は以下の手順で行う。

  1. レジストリのルートキー (レジストリエディタで見たときに 階層の一番上にあるキー) を取得する。 このキーは WINREG.H の中で以下のように値が定義されている。
    HKEY_CLASSES_ROOT (0x80000000)
    アプリケーションの関連づけ・CLSID管理。
    HKEY_CURRENT_USER (0x80000001)
    ログオンユーザのプロファイル。
    HKEY_LOCAL_MACHINE (0x80000002)
    システム全体の設定。 HARDWAREサブキーの下はシステム起動時に採集される。
    HKEY_USERS (0x80000003)
    ユーザ全体のプロファイル。 ただし、通常ログオン中ユーザのものとデフォルトのみがロードされている。
    HKEY_PERFORMANCE_DATA (0x80000004)
    NTパフォーマンスデータ。 API呼び出し毎にパフォーマンス取得用DLLにより採集される。
    HKEY_CURRENT_CONFIG (0x80000005)
    現在のシステム設定。
    HKEY_DYN_DATA (0x80000006)
    95リソースなどの変動データ。
  2. RegOpenKeyEx() により、 取得したいデータの上にあるサブキーをオープンする。
  3. (必要ならば) RegQueryValueEx() により データのサイズを求め、データの取得領域を確保する。
  4. RegQueryValueEx() によりデータを取得する。
  5. RegCloseKey()によりサブキーをクローズする。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

データの設定

レジストリへのデータ設定は以下の手順で行う。

  1. レジストリのルートキー (レジストリエディタで見たときに 階層の一番上にあるキー) を取得する。
  2. RegOpenKeyEx() により、 データを設定したいデータの上にあるサブキーをオープンする。
  3. RegSetValueEx() によりデータを設定する。
  4. RegCloseKey()によりサブキーをクローズする。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

サブキーの保存

任意のサブキー下にあるレジストリデータの保存は以下の手順で行う。

  1. SeBackupName 特権を取得する。
  2. レジストリのルートキー (レジストリエディタで見たときに 階層の一番上にあるキー) を取得する。
  3. RegOpenKeyEx() により、 保存したいサブキーをオープンする。
  4. RegSaveKey() によりデータを保存する。
  5. RegCloseKey()によりサブキーをクローズする。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

サブキーの復元

任意のサブキー下へのレジストリデータの復元は以下の手順で行う。

  1. SeRestoreName 特権を取得する。
  2. レジストリのルートキー (レジストリエディタで見たときに 階層の一番上にあるキー) を取得する。
  3. RegOpenKeyEx() により、 データを復元したいサブキーをオープンする。
  4. RegRestoreKey() によりデータを復元する。
  5. RegCloseKey()によりサブキーをクローズする。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

ハイブについて

レジストリ階層のトップであるローカルおよびリモートの HKEY_USERS と HKEY_LOCAL_MACHINE の直下へは 任意のハイブのロードを行うことができる。 たとえばふつうは、システム起動時には 以下の5個のハイブがロードされる。

これらのうちのいくつかはシステムにとって たいへん重要なハイブであるため、 Windows NT ではこれらを修復ディスクの中に 圧縮保存するようになっている。

一方、ユーザログオン時には以下のハイブがロードされる。

ログオンユーザのユーザプロファイルハイブを特定するには、 まず、そのユーザの SID を知らなければならない。 一般的には、あるユーザのログオン中に HKEY_USERS の下に .Default 以外にサブキーが 1 個しかなければ、 そのサブキーが SID を示す (たとえば著者の自宅マシンでの SID は S-1-5-21-9395636-2047547207-2009219921-1000 である)。

次に、以下のサブキー

--------------------------------
HKEY_LOCAL_MACHINE\
  SOFTWARE\
    Microsoft\
      Windows NT\
        CurrentVersion\
          ProfileList\
--------------------------------
の下のサブキーから、ユーザの SID と同じ名前のついたサブキーを見つけ、 そこにある値 ProfileImagePath を見る。 この値のデータが求めるユーザのプロファイルハイブファイル名である。

ひとたびロードされたハイブファイルは、 他のプロセスからアクセスできないようになっている。 ハイブを操作する API がいくつか用意されている。

RegLoadKey
ハイブをレジストリにロードする。 レジストリへの読み書き以外の方法ではハイブファイルに アクセスできなくなる。
RegUnloadKey
ハイブをレジストリからアンロードする。 レジストリへの読み書き以外の方法でハイブファイルに アクセスできるようになる (あまり意味はないが :-))。
RegReplaceKey
ハイブを置換する。


ハイブのロード

レジストリハイブのロードは以下の手順で行う。

  1. SeRestoreName 特権を取得する。
  2. ローカルまたはリモートの HKEY_LOCAL_MACHINE または HKEY_USERS を取得する。
  3. RegLoadKey() によりハイブをロードする。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

ハイブのアンロード

レジストリハイブのアンロードは以下の手順で行う。

  1. SeRestoreName 特権を取得する。
  2. ローカルまたはリモートの HKEY_LOCAL_MACHINE または HKEY_USERS を取得する。
  3. RegUnLoadKey() によりハイブをアンロードする。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

ハイブファイルの置換

レジストリハイブの置換は以下の手順で行う。

  1. SeRestoreName 特権を取得する。
  2. ローカルまたはリモートの HKEY_LOCAL_MACHINE または HKEY_USERS を取得する。
  3. RegReplaceKey() によりハイブの置換を準備する。
  4. 必要ならばシステムをリブートさせる。
サンプルプログラムをご参考のこと。 このサンプルには著作権は主張されない。

リファレンス

API

API 説明
レジストリサブキーに対する操作
RegCloseKey レジストリサブキーをクローズする。
RegConnectRegistry リモートマシンのレジストリに接続する。
RegCreateKey レジストリサブキーを作成する。
RegCreateKeyEx レジストリサブキーを作成する。
RegDeleteKey レジストリサブキーを削除する。
RegGetKeySecurity レジストリサブキーのセキュリティ情報を取得する。
RegNotifyChangeKeyValue レジストリサブキーや値の変更通知を受ける。
RegOpenKey レジストリサブキーをオープンする。
RegQueryInfoKey レジストリサブキーの情報を取得する。
RegSetKeySecurity レジストリサブキーのセキュリティ情報を設定する。
RegRestoreKey レジストリサブキーを復元する。
RegSaveKey レジストリサブキーを保存する。
レジストリ値に対する操作
RegDeleteValue レジストリ値を削除する。
RegEnumValue レジストリ値を列挙する。
RegQueryValue レジストリ値のデータを取得する。
RegQueryMultipleValues レジストリ値の複数のデータを一度に取得する。
RegQueryValueEx レジストリ値のデータを取得する。
RegSetValue レジストリ値を設定する。
RegSetValueEx レジストリ値を設定する。
レジストリハイブに対する操作
RegFlushKey レジストリサブキーの内容をハイブファイルと同期させる。
RegLoadKey レジストリハイブをロードする。
RegReplaceKey レジストリハイブを置換する。
RegUnloadKey レジストリハイブをアンロードする。

YUTANI Miki <yuta@kt.rim.or.jp>
Copyright © 1996-1998 by YUTANI Miki.
All rights reserved.
$LastUpdated: Mon Mar 16 23:39:58 1998 $