ユーザー支援レジストリ変更プログラムの開発
指導教員名 坂本 直志助教授
学籍番号00kc504
学部生 淺賀 洋一
東京電機大学 情報通信工学科
2.3.1.4 REG_EXPAND_SZ型(展開可能な文字列値)
2.3.1.5 REG_MULTI_SZ型(複数行文字列値)
今回、本プログラムを作成した環境であるWindows XPには、レジストリと呼ばれる情報を格納するデータベースがある。これはWindowsにとって重大な機能であり、XP以前のWindowsにも存在している。Windows起動時にレジストリにアクセスして情報の読み込みを行い、起動を行う。普段何気なくWindowsを使用している裏にはレジストリ機能が働いているというわけである。逆を言えば、レジストリ機能が存在していなければOSインストール時のデフォルトの状態で常に起動されることになる。またWindows XPではマルチユーザ機能が搭載され、複数のユーザーの設定が保存されるようになった。レジストリは必須の機能であり、不可欠なものである。その一方、Windowsの動作を決定するため、レジストリをコントロールすることは有用である。そのレジストリに関してのアプリケーションは、個人レベルで多数のアプリケーションが開発されている。一方、法人などでは活発に行われていない。Web上でも入手することができる。レジストリの書き換え・レジストリキーの作成はWindowsにあるregedit.exeというプログラムで設定できることを知っている方も多くいるだろう。regedit.exeでレジストリキーを見るだけではどのパラメータがどのシステム環境の設定に影響が出るのかが分かりにくい。また、レジストリの変更を誤るとシステムが稼動できない事態に陥る可能性も考えられる。そこで、本研究では開発されているプログラムを使用して容易にWindows環境を変更し、ユーザーごとの環境を構築する。本研究では、ユーザーの操作性を高められるようなプログラムを作成した。2章でレジストリの紹介、3章で開発されているレジストリ変更ソフトの紹介をした。
レジストリはコンピュータに保存されている情報であり、その項目は大きく分かれて次のようなものになる。レジストリ(Windows XP)は5個のデータブロックに分かれていてHKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,
HKEY_USERS, HKEY_CURRENT_CONFIGに大別される。各キーについて説明を述べる。
・
HKEY_CLASSES_ROOT
拡張子に関する情報と関連づけに関するものである。 また、OLE(Object Linking Embedding)に関する情報も格納されている。さらに、ウインドウ属性やファイルのドラッグアンドドロップ時の設定など、ファイル自体に関する情報を司るメインキーである。
保存されている概要
²
拡張子に関する情報
²
関連づけに関するデータ
²
アイコンに関する情報
²
OLE関連の情報
・
HKEY_CURRENT_USER
このキーが担当するのは、現在Windowsにログインしているユーザーに関する固有の情報である。このキーの内容は、Windowsの起動時に、HKEY_USERSというメインキーに格納されている情報のうちWindowsにログインしようとしているユーザーに関わるものが選択されコピーされることによって構築される。ログインするユーザーの固有設定が保存される。尚、Windows起動中に変更のあったユーザー固有の設定はこのメインキーの下層にあるサブキー内に反映される。反映された変更情報はWindows終了時にHKEY_USERSというメインキー内のログインユーザに対応するキーに書き込まれて保存される。常にレジストリが書き換えられていると言っても構わない。
保存されている情報の概要
²
ユーザー特有の個別情報
²
アプリケーションの設定情報(個別)
²
コントロールパネルの各種情報(個別)
尚、現在ログオンしているユーザーの情報を、このキーで管理されている。
・
HKEY_LOCAL_MACHINE
レジストリキーの名前からも推測できるがWindowsの起動から動作までシステム全体を制御するために必要な全ての情報が格納されている最も重要な領域である。このレジストリキーの階層の一部でも破損すれば、ほぼ確実にWindowsの再セットアップが必要となる。HKEY_LOCAL_MACHINEサブツリーにはすべてのユーザーに適用されるシステム全体の情報が格納されている。情報の内容としては、ハードウェア、ソフトウェア、セキュリティ、Windows自身の動作や機能の制御などWindowsの動作に関わる全領域に及ぶ。
保存されている情報の概要
²
PCに接続された各種ハードウェアリスト情報
²
ドライバ情報
²
プラグアンドプレイ情報
²
Windowsの基本設定情報
図1 regedit.exeの起動時(Windows XP)
・ HKEY_USERS
このキーが担当するのは、ユーザー別の設定とデフォルトのWindows情報である。またコントロールパネルにある各アイコンから設定を変更した情報も保存される。Windows起動時に、システムはこのメインキーを参照し、ログインしようとしているユーザーに関わるものが選択され、HKEY_CURRENT_USERキー以下のサブキーが構築される。
保存されている情報の概要
²
パスワード情報
²
Windowsに登録されているユーザーごとの個別情報
²
Windowsのデフォルト設定情報
²
アプリケーションの設定情報(ユーザー各自)
²
コントロールパネルの各種情報(ユーザー各自)
レジストリの基本的動作を説明する。レジストリとはWindowsの諸設定を記録したデータベースである。ここには、各種ハードウェア機器・Windowsにインストールされているアプリケーションの設定情報をはじめとして、ユーザーへ固有の設定に至るまで実に細やかな設定情報が全て記録されている。Windowsは起動時にレジストリにアクセスし、設定情報を得てシステムが起動されている。 1章にも挙げたがレジストリの一部が破損していたりすると正常にアクセスできない場合が発生し、時にはWindowsが起動できなくなったりする事もある。理解した上でレジストリ操作を行うと、カスタマイズやトラブルシューティングが行える。また変更されたレジストリ内容を有効にするにはWindowsを再起動して新しいレジストリ内容を読み込ませて設定を有効にする必要がある場合もある。レジストリの変更をモニタリングすると常に書き換えがなされている。図2にレジストリに関する情報の流れを概略した。本研究ではユーザーに関する情報を取り扱う。
レジストリの内容はどのような形でどのような値で保存されているのか述べる。
図1右側画面には、レジストリキーに格納されているデータ項目が表示される。データ項目を「エントリ」と呼び、エントリは「エントリ名」「データ型」「値」の3つの要素によって構成されており、レジストリエディタ右のフィールドではそれぞれ(名前)(種類)(データ)と表示される。エントリはいずれかのレジストリキーの中に作成されるが、同じキーの中で重複するエントリ名の生成は許されない。通常、レジストリキーの中には少なくとも1個のエントリが作成されており、「既定」あるいは「標準」である。このエントリはレジストリキーの作成時に自動的に登録されるが、Windows XPでは「既定」、Windows 2000では「標準」と表示される。本研究ではWindows XPでのデータを説明する。Windows XPではエントリを作成する際にこの5つのデータ型を選択可能である。次に列挙するデータ型はレジストリデータのほとんどで使用されている基本的な型である。
図2 ユーザー設定情報のレジストリ動作の概略
REG_SZ型は単純な文字列型のデータある。漢字を含め、キーボードから入力できる文字が情報になる。システムやアプリケーションだけが理解できるキーワードや特殊な符号、ファイル名、一般情報等、レジストリの中では、最も多く利用されているデータ型である。NULL(””)で終わる可変長の文字列で表される。Windows2000/XPのREG_SZデータは、内部ではすべてUNICODEで格納される。
4バイトの数値データである。レジストリに格納されるデータは4バイト(Double Word)の数値になる。0〜4,294,967,295あるいは-2,147,483,648〜+2,147,483,648の範囲の値で表記される。8桁の16進数で表示される単一の32ビットの値(ex.0x00000001(1))のように16進数あるいは10進数で表記される。
バイナリ型のデータが格納される。レジストリエディタ上では16進数の文字列として表示され、システム内部ではバイナリ型で保存される。
文字列型のデータで、REG_SZと同種だが、データの中に環境変数や式を含めることが可能である。環境変数を利用すると不確定な値、たとえばシステムドライブやログオン中のユーザー名などを、実際に使用される時点の環境に応じて置き換えることができる。REG_EXPAND_SZ型のエントリに[%SYSTEMDRIVE%\Documents
and Settings\%USERNAME%]というデータを格納すると想定する。読み出し時には[%SYSTEMDRIVE%]が[C:](ドライブ)に、[%USERNAME%]が[00kc504]に置換され、[C:\Documents
and Settings\00kc504]の様な文字列が取得される。
2.3.1.1に挙げたREG_SZと同種だが、REG_SZが1つの文字列だけを格納できるのに対してREG_MULTI_SZ型は複数の文字列を同時に格納が可能である。複数の情報の集合であるリスト形式のデータが格納される。尚、現在REG_EXPAND_SZ型とREG_MULTI_SZ型があるのはWindows 2000およびWindows XPのみである。
代表的なレジストリカスタマイズツールをいくつか紹介する。
Windowsのコントロールパネルでは、ユーザーアカウントやデスクトップに関する設定、プログラムの削除や追加などが行える。この機能がXP以前のWindowsから存在している。デスクトップなどの設定などが変えられることから、レジストリを変更しているGUIプログラムとも考えられる。また、以下に述べるツール群の1種とも考えられる。
Tweak UIはMicrosoft社が開発したソフトであり、レジストリを変更しWindowsのユーザインターフェースをカスタマイズする無料ソフトである。歴史的にはWindows95の時代からパワーユーザー向けにPower
Toysの1つとして既に公開されていた。Power
Toysは、Windowsのシェル開発チームが開発したツール群であるが、ここではレジストリカスタマイズツールであるTweak UIの紹介に留まる。標準言語は英語であるが日本語化も個人で行われ公開されている。通常Windowsを操作していてはできないカスタマイズも可能である。対象レジストリキーが深い階層に存在していることも多々あり、ユーザーの手間という点でもGUIであることで利便性がある。3.1.1で主要な機能について説明する。
自動ログオン、色設定、マウスの調整、IEの設定群、デスクトップに関する項目やエクスプローラなどに関する設定群が用意されている。またアクセス権などにシステムに詳しいユーザー向けの項目も存在する。全体的に視覚的に変更されるキー郡が多い。
図3 Tweak UII画面(日本語化)
設定群も豊富でもっとも知られているカスタマイズツールと言えるだろう。こちらもフリーソフトであるが個人で作成されている。
コントロールパネルでは環境設定できないものが多い。ログオン設定、ネットワーク関連、アイコンの変更などTweak UIと同様多くの設定項目がある。スタートメニューの表示やWindows起動時・終了時の動作設定などGUIで設定する。設定ファイル出力も備えている。ネットワーク関連でMTU, RWINの設定などある程度パワーユーザー向けの項目群も存在する。
図4 窓の手 起動画面
このソフトも個人で作成され、窓の手と似たようなカスタマイズができる。
起動して最初にレジストリの確認ボックスが表示された。Windows
2000 と XP のユーザ環境をカスタマイズする無料ソフトである。ソフトでは、ボタンひとつで簡単に設定ができ、GUIによる編集が可能である。350程度の設定変更ができる。パフォーマンス関係から、デスクトップやエクスプローラの設定、セキュリティの設定や不必要なサービスを無効にする機能が搭載されている。
図5 窓使いの友 起動画面
紹介したプログラムはあくまでユーザー自身が使用するマシンのカスタマイズするプログラムである。本研究ではユーザーの操作性を支援し、ユーザーのレジストリエントリを取得し他マシンで同様の環境を作り上げるプログラムを作成した。そのためユーザー環境設定を取得しその項目についてレジストリ変更までを自動化している。ユーザーの使い易さという点を主とした。取り上げるレジストリキーはHKEY_CURRENT_USERが主である。以下では作成したプログラムについて説明する。
最初に、ユーザーの環境設定のエントリ値を取得する。次に取得したエントリ値をファイルへエクスポートする。実現しようとする環境設定ファイルを読み込む。読み込まれた各エントリ値をレジストリに書き込む。最後に再起動を行うという流れである。(図3)
次にプログラムのメニューバーの項目について説明する。
「GetRegistryValue」
現在のエントリ値を取得し、各レジストリキーの値が表示される。ここで確認ボタンをが押
されるとファイルへの設定値の書き出しを行われる。
「OpenRegistryFile」
レジストリ値の読み込みを行う。設定しようとするレジストリキー群を読み込み、レジストリ
への書き込みを行う。次に書き込み確認ダイアログが表示され「OK」を押すと再起動を促
す。再起動を行い、設定を有効にする。
「END」
プログラム終了項目であるが、処理が自動化されているのでほぼ使用しない。
図3 作成プログラムの流れ
開発環境はVisual C++6.0で行い、対象レジストリはWindows XPに対してのエントリ名に関して取り扱った。Windows API(Application Program Interface)を使用し図3の様な流れを作成した。
第一に変更されようとしているマシンのレジストリエントリの値を保存するために、現在の設定を読み込みとファイルへの出力をリンクする。最終的にはtxt形式で保存されるが、保存先にはFDDなどのシステムドライブ以外のメディアドライブを指定する。実現する環境設定ファイルを取得、エントリ値の書き換え、最後に再起動を行う。情報を有効にして他ユーザー環境を別マシンで実現する。
4.2から推測できる通り至ってシンプルな仕様となっている。メニューバーより各項目を選択し命令を与え順に従う。一連の操作を述べる。
図4は起動して「File_Registry」を選択した画面である。初めに「GetRegistryValue」を選択する。クリックされ、プログラムがシステムより情報を取得する。
図4 命令コマンドの表示画面
「GetRegistryValue」がクリックされて、図5のような確認ダイアログが表示される。各エントリと現在の値が表示される。
図5 設定確認画面
図6の確認ダイアログで「OK」をクリックした後、ファイル保存動作に移る。保存するメディアドライブを選択し、保存する。その時に図7が表示される。
図6 出力確認画面
図8 ファイル保存画面
保存(バックアップ)後、通常画面に戻る。次にマシンに設定しようとするファイルアクセスを行う。図4より「OpenRegistryFile」をクリックする。次に図8が表示されファイル選択を行うと他ユーザーの設定の読み込み、レジストリエントリへのデータ設定が行われる。
図8 エントリ値ファイル読み込み画面
データ設定が終わると図9の書き込み終了ダイアログが表示され、「OK」をクリックすると図9の再起動を促すメッセージボックスが表示され、「はい」ボタンをクリックする。最後にシステムの再起動に移る。
図9 書き込み終了画面 図10 再起動メッセージボックス画面
他のレジストリカスタマイズツール群との比較をする。いくつかの比較項目を採り、図10を作成した。
ツール / 比較項目 |
エントリ項目群 |
ユーザー層の広さ |
特徴 |
Tweak UI |
多 |
パワーユーザー向 |
GUIで設定 デフォルトは英語版 |
窓の手 |
多 |
パワーユーザー向 |
GUIで設定 日本語版、詳細設定可能 |
窓使いの友 |
多 |
パワーユーザー向 |
GUIで設定 日本語版、詳細設定可能 |
本プログラム |
少 |
幅広いユーザー向 |
設定をファイルから読み込み、一連の流れを自動化 |
図10 主な他ツールとの比較表
本研究ではユーザー環境を他マシンで実現するというプログラムを作成した。システムドライブに保存しても構わないが、FD(フロッピーディスク)や他のメディアを推奨しマシンに存在すれば、本プログラムを稼動可能である。開発はWIN32 APIを用い、C言語で作成したが、対象OSはWindows XPに限っている。Tweak UIでは、主にパワーユーザー向けという仕様であるが、本研究では変更項目の書き換えを自動化し、幅広いユーザー層に使用可能であると考えられる。シンプルな操作という点が一つの特徴である。レジストリカスタマイズツールはTweak UIなど存在しているが筆者が調べた限りではレジストリ関連研究はある程度、コンピュータに詳しいユーザー向けのツールが多く、自動化という点を取り上げ良い調査・研究ができたと思われる。FD一枚で設定変更であるという面白みという点もあった。今回、レジストリエントリをユーザーによって変更される機会が多いキーについてのみ取り上げた。あくまでWindows内における操作の煩わしさを想定したエントリだけについての自動化を行ったが、エントリ群の増加、選択という部分の改良点があると考える。OSバージョンへの対応なども挙げられる。
[1] 「Win32 APIのしくみ」 著者 小林 哉 工学社
[2] 「猫でもわかるWindowsプログラミング」 著者 粂井 康孝 ソフトバンク
[3] http://www.microsoft.com/windowsxp/pro/downloads/powertoys.asp PowerToys
Windows for XPホームページ
[4] http://www3.zero.ad.jp/suto/twui.htm Tweak UI日本語化ホームページ
[5] http://www.asahi-net.or.jp/~vr4m-ikw/index.html 窓の手 公式ホームページ
[6] http://www.geocities.co.jp/SiliconValley/7587/ 窓の使いの友の家