● KK法・立ち塞がる壁
■□■ 8MBの壁・4MBの壁 ■□■
1ドライブで数 GB もあるディスクを使っていると、特に導入容量を気にすることもなくアプリケーションを追加してしまい、気付けば System.dat のサイズが数 MB にもなってしまっている方も結構おられるだろう。
OS が Windows98 であれば、レジストリ再構成には付属してくる Scanreg.exe を用いればよく、今さら Regedit.exe を使うことはないと思われがちだ。しかし Scanreg.exe には 8MB を越えるレジストリを扱えない問題があることが分かっている(→参照)。
ではこれまでのように、Regedit を用いた再構成手法に帰ればよいかというと、レジストリサイズによってはそれもままならない。OSR2 以降で定番と言われる再構成法、KK法B方式に代表される「REGEDIT /E → /C」では、リアルモードの Regedit.exe が 8MB を越えるレジストリを扱えない制約に引っかかる(→参照)。ならばKK法A4方式ではどうかというと、既に説明した制約、すなわちがセーフモードで 4MB を越えるレジストリを扱えない制限が効いてくる。
市販のレジストリ再構成ツールでさえ、Regedit.exe を利用しているものはこの制限に引っかかり、再構成できないのである。
■□■ 壁を越えるには ■□■
仮にサイズが 10MB の System.dat があるとする。レジストリの中の OLE クラス情報は平均して全体サイズの約7割を占める。10MB の System.dat なら、およそ 7MB がクラス情報と推算できる。クラス情報がなければ Win9x は標準起動できないため、何とかして取り込まねばならないが、冒頭に述べた制約により取り込むタイミングがない。
ではどのような環境なら巨大なレジストリキーを扱えるかと言うと、標準モードで起動したときである。しかし、標準モードで起動するためにはクラス情報が必要だ。このループを断ち切らない限り、前に進めない。
標準モードでクラス情報が必要なのはなぜか? エクスプローラが必要としているからだ。では、Windows にとってエクスプローラとは? ただの1つのシェルに過ぎない。エクスプローラは必須ではないのである。KK法A4方式でも裏技的に行っているように、エクスプローラをシェルにしなくても Win9x は立ち上がるのである。
まだ問題がある。標準モードで起動するためには、ハードウエア情報が必須である。KK法A4方式で用いた起動最小レジストリはセーフモードを起動するためのものであり、標準モードでの起動には情報が不足し過ぎている。標準起動に耐えられる新しい最小レジストリが必要である。
標準起動するのに最小のレジストリとは、どんなものか? それは Windows 導入直後のレジストリである。コンピュータに接続されている全てのハードウエア設定情報、および、Windows の初期設定を持ち合わせ、かつ、Windows 付属ソフト以外のアプリケーション情報が存在しない。レジストリサイズも、Internet Explorer が入ってなければ System.dat と User.dat 合わせてもせいぜい 1MB 程度だ。これはどんなマシン環境でも大差がないはずである。
自分で新規に Win9x を導入した場合には、ルートディレクトリに System.1st という初期レジストリのバックアップが残されることがある。再構成に使って使えないこともないが幾らか欠落した情報もあるし、System.1st のないマシン環境も存在するので、ここでは現在使用中のレジストリを加工して、導入直後状態に近づける方法を考える。
さて、既に巨大化したレジストリを、導入時状態に戻すのはなかなか難しい。特にクラス情報の格納状態は複雑で、理屈の上では初期状態に存在するもののみ選ぶことは可能だが、実際にそれを行う手間を考えると背筋が寒くなる。簡便に事を進めるにはやはりクラス情報は抜きで行く方がよい。
以上をまとめると「標準モードで起動するに最小のレジストリを、クラス情報抜きで作成し、シェルをエクスプローラ以外に替えて標準モードで起動してから、すべてのレジストリ情報を取り込む」ことで、8MB を越えるほど巨大化したレジストリを Regedit.exe で再構成できる、というわけだ。