なーたのおぼえがき

なーたのおぼえがき

つくったものとか

レジストリ③ HKEY_CLASSES_ROOTとHKEY_PERFORMANCE_DATA

さて短期スパンでスマホが死ぬという微妙な出来事がありましたが、色々置いといて。とうとうこれで書溜め分が消失します。どうしよ。前回慌てて投げたので地味な弊害が出てて、そのうちの1つが書溜め消失。
いつもなら投稿する時は次が書き終わった状態なんですが、どうせだし書溜め使い切っちゃおうということですね。これも半分までしか書けてなかったから加筆が大変。
まあそんなこんなでレジストリのルートキー最後の2つ、HKEY_CLASSES_ROOTとHKEY_PERFORMANCE_DATAです。今回でルートキーの説明は終わってあとはなんか面白いのがあったらそれをまとめるかな。記憶と知識の整理になって実に便利だよね。

前回のあらすじ

HKEY_LOCAL_MACHINEとHKEY_CURRENT_CONFIGについて説明したよ。
最後にはおまけで曖昧なWindowsNTの起動フェーズを書きました。
随分前に読んだ本のメモを参考にしながら書いたので見にくいのでもしかしたらもちょっと綺麗にするかなあ?
あと最終校閲しないまま投げたのでさっきちょっとだけ文言やらを修正しました。内容には多分変更ない。
clairdeluna-eve.hatenablog.com
では今回で全部のキーについてざっとした説明が終わります、いってみよー

HKEY_CLASSES_ROOT

このキーにはファイルを開くときの関連情報や拡張子の関連付け、COM(Component Object Model)の登録情報が入ってる。
ちょっとややこしいけど、サブキーでありルートキーであるというものになります。
COMは.NET Frameworkの前身?でソフトウェアを部品化して、呼び出して使おうねっていうMicrosoftが提唱したオブジェクト指向プログラミングモデルの1つ。
詳しくはこっち読んでね
chokuto.ifdef.jp
ざっくりいうとレゴブロック(部品)積み上げて車とかお城とか(何かの機能を提供するもの)作ろうねって考えのことです。ブロックがいろんなことに使えて作られる形が1つじゃないように、開発者が様々に組み合わせて簡単に成果物を作ることができます。ブロックの間に色々(自分で書いたプログラム)挟まってるけどな。ちなみにこのブロックは喋ります(APIとかなので)。数パターンしかないけどな。
例えば緑ブロックは「〇〇」って言ったら「あ」って返してきて「xx」って言ったら「お」って返すみたいな感じ。でこれを使って「あ」のときは立って「お」の時は手を振ろうってしたらブロックがしてくれる分は自分でプログラム書かなくていいので。

話が少々ずれました。サブキーでもルートキーでもあるっていうことについて説明します。まあそのままの意味なんだけど。
このキーの実際の中身はHKLM/Software/Classes(システム共有のデフォルト)とHKCU/Software/Classes(ユーザー固有)を融合したもの。融合時の優先度はHKCUの方が高くて、同じ項目で値や設定が違った場合はHKCUの設定が優先されます。だからもしこのキーを変更するというか設定を変更する際は原則的にHKCUを編集する(両方編集する必要はない)ことになります。あ、もちろんHKCRを編集することもできるからね。
他にも特徴はあって。例えばファイルをダブルクリックした際の設定は基本的にHKLMが使用されてる。でもユーザーが関連付けを変更した時はHKCU (ユーザーの変更した設定)が変更されます(HKLMには書き込み権限がない)。
正確に言えばHKCRでキーの値が変更されたとき、HKCUに該当キーが存在したらそれを存在しなかったらHKLMを変更するっていう動き。前の優先度の話と大体一緒。

サブキーは多すぎるので省略。気になる人は自分で見よう。基本的には拡張子とかを含む大量のサブキーが入ってるよ。列挙とか無理ぽ。

HKEY_PERFORMANCE_DATA

さて、このキーはレジストリに実際存在するキーではありません。なのでレジストリを操作するプログラムを書いて(RegQueryValueEx関数を使用)参照する必要があります。パフォーマンスもニタを表示するのとかに使われています。プロセス間通信とパフォーマンス拡張子DLL (performance Extensions DLL)ですね。たまにクラッシュするって聞くけどどうなんだろ。
あとこのキーは実際に値が入っているのではなくて関数の集合です。
書くことなくなった…

HKEY_DYN_DATA

おまけ。Windows95/98/Meにだけ存在するキーです。ユーザーがカスタマイズ用じゃないし変更することのないキーで、変化していくPCの情報が随時更新されていくやつ。どの程度随時かと言うと取得している間に値が変化してるレベルです。
バイスマネージャーとかシステムモニターとかはこのキーから情報を取得しているから実質その値がこのキーの値ってことになりますかな?
ちなみにPlug&Play情報も含まれてたり。

サブキーは

Config Manager ハードウェアの構成とか障害情報、現在のステータスの情報
Perf Stats PCのパフォーマンス情報

このキーを使ってるバージョンだとCPUの使用率を取得するにはHKEY_DYN_DATA\PerfStats\StartStat\KERNEL\CPUUsageにアクセスすると計測が開始するって感じ。で、HKEY_DYN_DATA\PerfStats\StopStat\KERNEL\CPUUsageにアクセスすると計測が終了します。いつもはCPU使用率が上がるから沈黙してるよ。
HKEY_PERFORMANCE_DATAと変わんない、のかな?
あとこのキーは(HKEY_PERFORMANCE_DATAも?)ハードディスクじゃなくてRAMに構築されてるっぽい?アクセス速度がものを言うタイプのはRAMに書かれるみたい。

さて、このあとなーんも考えてないからどうなるかわからんよ。