Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

Hiveベースレジストリの実装(1)

Windows CE.NETのHiveベースレジストリ機能とは、いずれかのファイルシステム(記憶装置/記憶デバイス)を利用して、レジストリ情報を保存/再ロードするための仕組みです。初期のWindows CEでは(現在では)RAMベースレジストリと呼ばれる機能を利用してRAM上にレジストリ情報を管理し、レジストリ保存が必要なときには、(1)RAMをバッテリバックアップすることによりレジストリが消えないようにする(2)レジストリを一気に書き出し読み込みするためのOEM関数をOALに実装、のいずれかの方法を利用していました。これらはリニアにアクセスできるストレージ(たとえばフラッシュメモリとか)に保存するのに適当な方法で、(たとえばFATFSのような)ファイルシステムがまだ起動していないカーネル立ち上げ時に、問題なくレジストリ情報を読み込むことができます。

要するに、レジストリファイルシステムに保存するとき問題点は、(保存時にはもちろん問題ないのですが、)システム起動時にはファイルシステムやデバイスマネージャ、ストレージドライバが動作していない、ということにあります。実はCE3.0以前にもレジストリファイルシステムを利用して保存することが行われていました。その方法は「2重ブート」と呼ばれる方法で、いったんシステムを起動しファイルシステム経由でレジストリを読み込んだ後「ウォームブート」することによってもう一度立ち上げなおすわけです。ただし、この再起動には少なくとも数秒の時間がかかります。

CE.NETのHiveベースレジストリ機能はRAMベースレジストリと「2重ブート」の中間のような動作をします(下図参照)。Hiveベースレジストリが有効なときには、Filesys起動中にdevice.exeが起動されます。そしてレジストリに関連するストレージドライバがロードされ保存されたレジストリの内容が読み込まれた後、再びdevice.exeは残りのデバイスドライバを起動します。言ってみればdevice.exeのみの2重ブートを実現したのがHiveベースレジストリ機能と言えるかもしれません。

booting.gif

詳しくは以下のページをご覧ください。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemain4/html/_wcefiles_Registry_Startup_Sequence.asp