なーたのおぼえがき

なーたのおぼえがき

つくったものとか

レジストリ① HKEY_USERSとHKEY_CURRENT_USER

長くなったからどうせだし分けようの回第二弾。第一弾はUSERPROFILEに関するあれですね。ちなみにこれはそっちからの株分けです。
今回はレジストリの説明とマルチユーザー機能にかかわるキーを説明するよ。

レジストリって何?

簡単に言えばwindowsの設定が集積された中央集中型のデータベースのこと。
マルチユーザー機能に対応するべくwindows9.xから導入された設定保管庫です。

windows3.xの時はシステム設定とかアプリケーション(当時はアプレット)の設定は「.ini」ファイルに記録されていてテキスト管理されていました。でもテキスト管理では対応できない部分がたくさん。例えばユーザーの分離や管理、安全な書き換え。発展していくにつれて需要も増していったマルチタスクやマルチユーザーに対応することができないってなってしまう。
そこで、windows9.x以降はレジストリが開発、導入されました。今ではほとんどのアプリケーションやシステムがこれを参照するようになってる。

重要なのは、レジストリは単なるデータベースではないってこと。
「構成マネージャー」っていうwindowsOSの基幹カーネル(NTエグゼクティブ)と一緒に動いている動的構成管理機能の一つです。だから静的な値を持つものが多いって言っても、動的なエントリがあったり、ロールバック機能があったり、自動切り替え機能もあったりするよ。ちなみにツリー構造だよ。

HKEY_USERS

PCにログインしているすべてのユーザーの設定を保持しているメインキーのことです。略称は「HKU」。サブキーとしてユーザーごとの設定を保持しているよ。

主なサブキーは

.DEFAULT 新規ユーザが使用する設定
S-1-5-18 SYSTEMが参照する
S-1-5-19 LOCAL SERVICEが参照する
S-1-5-20 NETWORK SERVISEが参照する
S-1-5-21-(以下略) 特定のユーザーが参照する

ざっくり分けると「.Default」とSIDの二種類だね。SIDは「セキュリティ識別子(Security Identifier)」のことです。セッションIDじゃないよ。これについてはまたまとめて、できたらここにリンク貼っておきます。

HKEY_CURRENT_USER

ユーザー起動時に読み込まれる設定のこと。これはHKEY_USERSのサブキー(上表で言うと一番下)を指すように設定されています。

主要なサブキーは

AppEvents サウンドやイベントに関する設定
Console コマンドプロンプトに関する設定
Control Panel コントロールパネルの設定
Environment ユーザー環境変数
EUDC ユーザー定義外字に関する設定
Keyboard Layout キーボードに関する設定
Network ネットワークドライブのマッピングなどネットワークの設定
Printers プリンターの設定
Software ソフトウェアの構成情報。アプリケーションの設定はここ
System システムの設定
Uninstall 「プログラムの追加と削除」に関係するキー
Volantile Environment 保存されない揮発性の環境設定。セッションとか

こっちはHKUと違って完全に個人設定だね。それぞれのサブキーについてはそのうち。
表には書いていないけどSoftwareにはインストールしたアプリケーションに対応するサブキーが作成されていて、Windowsのサブキーも当然あるよ。これを編集することで通常はできないカスタマイズをすることも可能だったり。

windowsのマルチユーザー機能の仕組み

windowsのマルチユーザー機能はレジストリに作成されているHKEY_USERSとHKEY_CURRENT_USERの二つのメインキーを利用して実現されてる。

で、windows起動の流れとしては
windows起動フェーズ開始
②ログイン(ユーザーを特定する情報を入力する)
③HKEY_USERSのサブキーから該当のユーザーの設定を取得
④HKEY_CURRENT_USERにさっき取得した情報をコピー、DEFAULTと結合
⑤ユーザー固有の設定でwindowsを起動

④の情報を使用してユーザープロファイルが生成されています。
ログイン中はHKEY_CURRENT_USERの値だけを参照したり変更したりしているよ。

そして、終了時の動作だけど
windows終了処理開始
②HKEY_CURRENT_USERからユーザーの設定を取得
③HKEY_USERの該当ユーザーのサブキーに設定を保存
windows終了

つまり起動を終了は当然ながら真逆の手順だね。

とりあえずそのくらいかな?ほかのキーに関しては気が向いたら詳しく書こうかな。レジストリについても一緒だね。
レジストリを見てみたい!という人はwindowsキー+Rとかから「ファイル名を指定して実行」を呼び出して「regedit」って入力&Enterで見れるよ。こんな感じ。
f:id:Clairdeluna_eve:20181129165137p:plain
毎回文字多いわりに写真少なくってごめんね!