

■ Win9x のバージョンによるレジストリ API の相違検証
一部で「WindowsがOSR2になり、レジストリ再構築の為のAPIが追加されたことにより、レジストリの圧縮が可能になった」と言われている説を検証する。
改めて説明すると、ADVAPI32.DLLはWindows95のレジストリを扱うためのAPIで構成されている。拡張子がDLLであることから分かるように、Windowsアプリケーションの実行時にSYSTEMフォルダからメモリ読み込まれ、使用される。
〓タイムスタンプに注目〓
ADVAPI32.DLLのタイムスタンプが、時に他のシステムDLLと一致しないことがある。ADVAPIはWINDOWSの実行に必須のファイルであるため、奇妙なことなのである。ADVAPIのタイムスタンプから他に同日のファイルがあるか調べてみる。
ADVAPI32.DLLのタイムスタンプを、デスクトップ以下(あるいはWINDOWSフォルダのあるドライブ内)に対して検索してみてほしい。IEXPLORE.EXE(インターネットエクスプローラのブラウザ本体)などが検索結果に挙がってくることと思う(ネットスケープしかインストールしていない環境だとどうなるか不明)。
私の調べた限りでは、インターネットエクスプローラ(IE)の導入されている環境では、タイムスタンプについて「IEXPLORE.EXE=ADVAPI32.DLL」が成り立った。例えば、OSR1のみの環境と、OSR1にIEをインストールした環境では、ADVAPIのタイムスタンプが異なる。レジストリ直接アクセスのためのDLLである以上、マイクロソフト以外のソフトウエアメーカーが独自に拡張したADVAPIに置換することは考えられず、すなわち、IEの導入によってADVAPIが拡張されたかのように見えると推測される。
OSR2以降では最初からIEが組み込まれている(インストール時に分離できない)。素のOSR1とOSR2を比べれば、ADVAPIのタイムスタンプの他、中味に相違があることは当然なのである。
〓ADVAPIの中味の相違とは〓
では、OSR1以前とOSR2以降のADVAPI32.DLLを比べてみよう。比較表が大きくなってしまったので別頁にした。「ここ」をクリックして見てほしい。
エクスポート関数とは、DLLに含まれる機能の呼び出し口である。アプリケーションはDLLを読み込んだ後、目的のエクスポート関数を呼ぶことで、希望の機能の実現を果たすのである。
OSR2になって、すなわちIE導入によって追加されたエクスポート関数は、全て頭が「Crypt」で始まっている。これは「cryptograph(暗号)」から来ていると思われる。追加された関数名を先ほどと同様、デスクトップやWINDOWSドライブに対して検索してみると、IE絡みの(IEと同じタイムスタンプの)ファイルから呼び出されていることがお分かり頂けるだろう。サイト認証のための暗号を扱う関数とすれば、説明がつく。
ここで重要なことは、レジストリエディタREGEDIT.EXEが、追加エクスポート関数を全く利用していないことである(検索結果に上がってこない)。
〓結論〓
レジストリを操作するAPIは、IEの導入により新しいADVAPI32.DLLに置換されることで、追加される。追加されるAPIは暗号化データのやりとりを目的とする。OSR2では最初からIEが導入されているため、拡張された状態でのADVAPIしかインストールディスクに存在しない。
OSR2になってレジストリ圧縮インターフェースが追加されたという誤情報は、REGEDIT.EXEのリアルモード部分のバグが修復されたことに起因すると思われる。このバグ修復により、リアルモードでのレジストリファイルの読み書きの信頼性が格段に向上した(完全ではないが)。結果、レジストリ再構築の手順も簡便化され、あたかも再構築用の機能が追加されたかのように感じられてしまったのだろう。