

■ DiskX Tools Ver.7.0 for Windows
このパッケージは、レジストリを掃除する「レジストリクリーナー」を含む、13種類のユーティリティからなる。
レジストリクリーナーでは、レジストリに対し、
・不要タイムゾーン情報の削除
・16ビットアプリケーションのチェックデータ整理
・OLE情報、関連付け情報の整理
・不要な仮想デバイスドライバ情報の整理
・起動時自動実行するファイルリストの整理
・無意味なファイル参照の整理
・レジストリ再編成
を行える。
各機能の説明は取扱説明書に委ねるとして、ここでは「レジストリ再編成」機能を取り上げる。操作はウイザードに従って進めていけば、何ら問題なく完了するはずだ。レジストリ再編成後にはWindowsを再起動する必要があるので、レジストリクリーナーでレジストリ再編成機能を使うならば、予め他の全てのアプリケーションを終了しておく。
なお、DiskXTool Ver.7.0 自体の動作環境条件から「Windows95」が外れているため、レジストリ再編成機能も、Windows98 / 98SE / Me でのみ動作が保証されるようだ。Windows NT 4.0 / Windows 2000 では再編成機能を使用できないのも説明書に書いてあるとおりである。この理由は、以下に記すレジストリ再構成の流れを読めばお分かり頂けるであろうが、scanreg.exe を使用したレジストリ再構成を行っているからである。
●レジストリ再構成の流れ
リバースエンジニアリングを行わない範囲で、レジストリクリーナーの動作を解析した結果を説明しよう。以前紹介した Ver.5.0 までとは全く異なる流れになっている(Ver.6.0 のレジストリクリーナーを解析しなかったので、Ver.6.0 と Ver.7.0 の違いは分からないし、Ver.6.0 は販売完了商品なので今さら言及はしない)
レジストリクリーナーを起動したら、ウイザードの最初の画面で「レジストリ再編成」を選び、「次へ」をクリックする。
使用中の OS が Windows 98/98SE であれば、「再編成する」「SMARTDRVを使う」にチェックを入れ、「次へ>」をクリックする。Windows ME では両チェックボックス自体が現れないので、そのまま「次へ>」をクリックする。
レジストリのバックアップを勧める問い合わせが来るので、「はい」をクリックする。
このバックアップでは、運用中のレジストリ(c:\windows\system.datおよびuser.dat)を起動ドライブのルートディレクトリにコピーしている(両ファイルがc:\system.dat・c:\user.datとしてコピーされる)。
これ以降は、OS によって挙動が異なる。
Windows 98/98SE の場合、レジストリクリーナーからの最後の確認メッセージが表示される。「はい」をクリックして再編成のための再起動を開始する。
再起動直前には少し前処理を仕込んでいる。
まずは次のファイルに変化がある。
・Windows フォルダ
・Autoexec.bat
冒頭に Smartdrv.exe と Dxrereg.exe の実行が追記される。なお、元の Autoexec.bat は退避されないようだ。(Ver.5.0 では別名で保存されていた)
・System.dat(HKEY_LOCAL_MACHINE)
HLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce に Dxrereg.exe へのパスが記される。
再起動すると Autoexec.bat の記述に従い Dxrereg.exe が実行される。リアルモードの scanreg.exe を用いて「scanreg.exe /opt」を行っていると思われる。その証拠は autoexec.bat を強制的に終了させることで、scanreg を実施した後に生成されるレジストリ「system.bad」「user.bad」が c:\windows フォルダに新規に存在し、それよりも日付の新しく、ファイルサイズの異なる system.dat、user.dat が存在することから確認できる。また「scanreg.exe /opt」の実行中は、画面に何もメッセージが表示されないことも、1つの裏付けである(レジストリ再構成コマンドとして有名な「scanreg.exe /fix」の実施中は、テキストグラフィックの画面が出ることはよく知られている)。dxrereg.exe が内部的に「scanreg.exe /opt」を実行していても、画面上は全く分からないと言うわけだ。
生成したレジストリの拡張子は「.bad」となっているが、中身が壊れているわけではなく、scanreg 実施・成功前のレジストリを退避したものである。そして逆に、拡張子「.bad」のレジストリが生成しているということは、「scanreg.exe /opt」が成功した、と言えるわけで、この工程終了時点で、Dxrereg.cod が削除され、起動ドライブのルートに「Dxrereg.suc(ファイルサイズ=0 byte)」が作成される。「.suc」の意味は「success(成功)」の意味であろう。
続いて Windows が起動し、その途中で HLM\...\RunServicesOnce キーの記述により再び Dxrereg.exe が呼び出される。ここで上記ファイル「Dxrereg.suc」の存在を確認し、レジストリ再編成が成功したか否かを表示していると思われる。
「OK」をクリックすると、Autoexec.bat の内容が元に戻され、dxrereg.suc を削除し、再編成作業が完了する。ちなみに system.bad および user.bad のファイルは、Windows 起動時に自動実施される「scanregw /autorun」により、削除されている。
Windows ME の場合は流れがシンプルで、レジストリバックアップの後はいきなり「scanreg /opt」を実施し、以降の工程を「scanregw.exe」に引き継ぐ。
直接 GUI 版のレジストリチェッカーを呼び出して「scanregW /opt」としない理由は不明だが、Windows レジストリ チェッカーが表示される直前に、一瞬、DOS 窓が見えるので、リアルモードの scanreg を呼び出し、scanreg が windows 動作中を検知して、scanregw をチェイン実行していると思われる。再構成時のオプションについては追跡し切れていないので、Win98 での動作と同様に「/opt」のみと仮定したが、実際には「/fix」付きかも知れない。
上記画面で「はい」をクリックすると、レジストリ再構築後すぐに再起動となる。レジストリクリーナーによる仕込みはないので、再起動後はレジストリ再編成の成功報告もない。Windows が起動すればレジストリ再編成も成功したと言うことだろう。
Ver.7.0 では レジストリチェッカー「scanreg」を使用することで、レジストリ再編成作業を標準的な流れに近づけたと言える。Ver.5.0 においては、Microsoft Knowledge Base にも記されている「REGEDIT /E → /C」の手法でレジストリを再構成し、その流れの中で Windows 9x が上手く扱えない日本語キーを独自に処理する手法を取っていた。これも確立されたレジストリ再構成作業の手法の1つであるが、作業の途中に独自処理が入っており、レジストリを再構成できる完成形ではあっても、「標準」とは言い難いからだ。これまで調べた限りでは、Ver.7.0 では scanreg によるレジストリ再構成に手を加えている様子はなく、手順の利便性の向上を図っただけであるので、「標準」的な流れを補助した形のレジストリ再構成と言えるだろう。
また、これまで通り OS の壁を超えて同じオペレーションでレジストリの再編成作業を行える点も評価できる。Win98/98SE と WinME では、scanreg を用いたレジストリ再構成作業は雑誌でも取り上げられるが、WinME に DOS プロンプト画面が無いために、実施方法に場合分けが必要であった。DiskXTools Ver.7.0では、OS の違いを意識することなく、レジストリ再編成を行える。コマンドラインから「scanreg /.....」と入力する必要もない。
一方で気になる点が3つある。
1つ目は、Windows ME での実施において、レジストリクリーナによるレジストリのバックアップ対象に、Windows ME になって追加されたレジストリ「c:\windows\classes.dat」が含まれていない点だ。class 情報なくしてもはや Windows は動作できないので、Windows ME では、system/user/classes.dat の3ファイルをバックアップするようにしてほしかった。ちなみに、Windows レジストリチェッカー「scanregw.exe」は上記3ファイルを再構成する。再構成後の再起動直前に system/user/classes.BAD ファイルが存在することを確認している。
2つ目は、起動ドライブのルートに退避したレジストリからの復旧方法がマニュアルに書いてあるのだが、Windows 98 の場合は記されていても、Windows ME の場合が記されていない点である。これでは Windows ME においてレジストリクリーナーが起動ドライブのルートにレジストリのバックアップを取る意味が分からなくなってしまう。確かにある程度のスキルがあれば、そのバックアップからレジストリを復旧することは、マニュアルに書いて無くとも可能であるけれども、上級者のみをターゲットとしたアプリケーションでは無いと思うので、バックアップからの復旧方法を説明していないのは片手落ちと言わざるを得ない。
3つ目は、レジストリの再編成を scanreg の「/opt」のみで行っていると思われる点(Win98 で実施の場合)だ。
「scanreg /fix」の結果が拙作 RegCon と同等であることは別の章で説明したが、「/opt」だけでは Dead Gap の減少は起こらず、レジストリの空き領域である Empty Area の、文字通り「opt(imize=最適化)」をするだけである。Empty Area はレジストリ内では確かに無駄ともいえる領域の一つだが、システムによって再利用される可能性が高い分、それほど神経質になって駆逐する必要はない。一方の Dead Gap は再利用できない領域なので、こちらを減らすべきと思うのだが…。
以下に拙作 Registr!p で解析した、レジストリ再構成前後の内部状態を示す。比較のために、同じレジストリで拙作 RegCon による再構成も実施してみた結果も載せた。
これら3点はあくまで私見である。気になる点ではあるが大きな問題ではないかもしれない。レジストリのバックアップに関する2点について、Windows ME でより機能 UP した scanreg を使い再構成工程の信頼性が上がっていれば、それほど心配するには至らない。scanreg の実行オプションについても、Dead Gap はともかくレジストリの再構成をすることに意味があるとすれば、納得できるものだ。
なお、以上3点について、メーカーであるエー・アイ・ソフト株式会社に問い合わせたところ、「対応については今後のリビジョンアップ等で検討する予定」とのお答えを頂戴した。