Windowsレジストリについて色んな文献からチェリーピックしてまとめてみた。



Windowsのレジストリについてまとめてみました。(まとまっている資料が少ない...。)
基本的に、以下の文献からつまみ食いしただけなので詳しく知りたいのなら直接見に行っちゃってください。

* [上級ユーザー向けの Windows レジストリ情報](http://support.microsoft.com/kb/256986/ja)
* [製品の GUID 解読方法（Acrobat/Adobe Reader）](http://kb2.adobe.com/jp/cps/234/234647.html)
* [レジストリへの登録機能 ～ 作ってわかる COM の基礎](http://keicode.com/winprimer/com-basics1-3-registry.php)
* [Office 2010 における製品コード GUID の番号付けのしくみ](http://support.microsoft.com/kb/2186281/ja)
* [Chapter 9. COMに使われる諸技術(1)](http://atata.sakura.ne.jp/com/chap9.html)
* [インストーラの自作](http://www.trickpalace.net/windows/installer/)
* [製品の列挙](http://eternalwindows.jp/installer/msiinstall/msiinstall02.html)
* [ActiveXの登録情報について](http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+201204/12040003.txt)
* [WSHから見たCOMの基礎とレジストリ](http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071015/1192454217)
* [レジストリ](http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA)
* [COM、ActiveXコントロール、Microsoft Windows CE](http://msdn.microsoft.com/ja-jp/library/cc394338.aspx)
* [Dr. GUI、コンポーネント、COM、および ATL を使う](http://msdn.microsoft.com/ja-jp/library/cc482719.aspx)
* [MSI 形式のインストーラを手動でアンインストールする方法](https://hds.networld.co.jp/helpdesk/support/FaqFacadeServlet?TaskType=Detail&seriesId=InstallShieldFAQ&id=00001746&categoryId=0064&JspUrl=/support/FrequentlyDetail.jsp)



レジストリ (Registry) は、Microsoft社製のオペレーティングシステム(OS)で用いられている設定情報のデータベースです。
レジストリには、下記ようなWindowsが実行中に絶えず参照する情報が格納されます。

* 各ユーザーに関するプロファイル
* コンピューターにインストールされているアプリケーションおよび各アプリケーションで作成可能なドキュメントの種類
* フォルダーおよびアプリケーション アイコンについてのプロパティ シート設定
* システム上に存在するハードウェアの種類
* および使用中のポート
* ...など


一般的にレジストリの編集には下記の方法で行います。

* レジストリ エディター (Regedit.exe または Regedt32.exe)
* レジストリ (.reg) ファイル
* VisualBasic スクリプト ファイルなどのスクリプト
* regコマンド
* グループ ポリシー
* システム ポリシー
* ...など


![](http://59.106.182.77/j/2011-03/regedit.png)


regedit.exeなどでレジストリを確認してみると大まかに５つのキーに分かれています。
次の表は、システムにより使用される定義済みキーの一覧です。キー名の最大サイズは、255文字です。

| キー名              | 説明                                                                                                        |
|:-------------------:|:------------------------------------------------------------------------------------------------------------|
| HKEY_CURRENT_USER   | 現在ログオンしているユーザーの構成情報のルートが格納されています。                                          |
| HKEY_USERS          | コンピューター上に読み込まれた有効なユーザー プロファイルがすべて格納されます。                             |
| HKEY_LOCAL_MACHINE  | コンピューターに固有の構成情報が格納されます。                                                              |
| HKEY_CLASSES_ROOT   | このキーは HKEY_LOCAL_MACHINE\Software のサブキーです。                                                     |
| HKEY_CURRENT_CONFIG | システムの起動時にローカルコンピュータにより使用されるハードウェアプロファイルに関する情報が格納されます。  |

![](http://homepage3.nifty.com/sony/sd/contents/graph/regedit01.jpg)


データ型
--------

| データ型名                      | データ型の種類      | 説明                                                |
|:-------------------------------:|:--------------------|:----------------------------------------------------|
| REG_BINARY                      | バイナリ値          | 生のバイナリ データ。                               |
| REG_RESOURCE_LIST               | バイナリ値          | 入れ子にされた一連の配列。                          |
| REG_RESOURCE_REQUIREMENTS_LIST  | バイナリ値          | ネストされた一連の配列。                            |
| REG_FULL_RESOURCE_DESCRIPTOR    | バイナリ値          | 入れ子にされた一連の配列。                          |
| REG_DWORD                       | DWORD値             | 4バイト長の数値 (32 ビット整数) で表されるデータ。  |
| REG_EXPAND_SZ                   | 文字列値            | 可変長のデータ文字列。                              |
| REG_MULTI_SZ                    | 文字列値            | 複数行の文字列。                                    |
| REG_SZ                          | 文字列値            | 固定長のテキスト文字列。                            |
| REG_NONE                        | なし                | 特定の型を持たないデータ。                          |
| REG_LINK                        | リンク              | シンボリックリンクの名前を指定する Unicode 文字列。 |
| REG_QWORD                       | QWORD値             | 64ビット整数の数値で表されるデータ。                |



Component Object Model（COM）
-----------------------------

COM の機能を利用するためには、 COM のクラス ID をレジストリに登録します。

COMコンポーネントをレジストリに登録する。

> regsvr32 foo.dll

COMコンポーネントをレジストリの登録から解除する。

> regsvr32 /u foo.dll


一般的に、COMコンポーネントを登録すると以下のようなレジストリが書き込まれます。

| キー                                           | 値の名前       | 値                   |
|:----------------------------------------------:|:---------------|:---------------------|
| HKEY_CLASSES_ROOT\CLSID\{GUID}                 | (Default)      | 説明文               |
| HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32  | (Default)      | DLL のパス           |
| HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32  | ThreadingModel | スレッディングモデル |
| HKEY_CLASSES_ROOT\CLSID\{GUID}\ProgID          | (Default)      | プログラム識別子     |
| HKEY_CLASSES_ROOT\{プログラム識別子}           | (Default)      | 説明文               |
| HKEY_CLASSES_ROOT\{プログラム識別子}\CLSID     | (Default)      | {GUID}               |



Microsoft Windows Installer（MSI）
----------------------------------

| キー                                                                   | 説明                                                                                                    |
|:----------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------|
| HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer | UserDataサブキー以下に、システムに存在するユーザーをテキスト形式のSIDで表したサブキーが列挙されている。 |
| HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer                          | Productsサブキー以下に、システムに存在する全ユーザーに対してインストールされた製品が列挙される。        |
| HKEY_CURRENT_USER\Software\Microsoft\Installer                         | Productsサブキー以下に、現在ログオンしているユーザーに対してインストールされた製品が列挙される。        |

まとめ
------

Windowsのレジストリを調べていくと最終的にCOMに辿りつきます。
なので、レジストリを直接調べるよりCOMを調べた方が早かったりします。