連載
» 2007年05月15日 08時00分 公開

サクッとおいしいVistaチップス 8枚め:ファイルとレジストリの仮想化を理解する

Vistaで古いアプリケーションを使っていて、設定の変更内容が反映されないなら、それは仮想化機能が原因かもしれない……。仮想化機能って何?

[織田薫,ITmedia]

今回のチップスが使えるエディションは?
エディション Home Basic Home Premium Business Ultimate
対応状況

 使い慣れたレガシーなアプリケーションをWindows Vistaで利用していて、各種設定をカスタマイズしたのに、変更の内容を確認するためにレジストリやiniファイルをチェックしても、設定が反映されていないといったことはないだろうか? これは、Vistaに搭載されたファイルとレジストリの仮想化機能が原因になっている可能性がある。

 Windows 2000やWindows XPでは、管理者権限を持つユーザーはシステムフォルダやレジストリへの書き込みを自由に行えた。このため、Vistaに対応していないアプリケーションは、不必要に管理者権限を求めるものがある。たとえば、Windowsのシステムフォルダに対してフルアクセスの権限を要求してファイルを作成したり、システム全体の設定が記述される「HKEY_LOCAL_MACHINE」レジストリへの書き込みを行っていたりするのだ。

 Vistaではセキュリティの向上のため、ユーザーアカウント制御(User Account Control:UAC)機能を導入し、システムフォルダやレジストリへの書き込みを制限している。管理者に対してNTFSのアクセス許可や、レジストリのアクセス許可が与えられていても、UACによってユーザーが権限を昇格しない限り、アプリケーションは管理者権限を取得することができない。したがって、UACが有効になっているシステムは、管理者としてアプリケーションを実行しないと、Windowsのシステムフォルダなどに書き込みが行えないのだ。

UACが有効になっていると、フォルダやレジストリが仮想化される。Vistaに対応していないレガシーなアプリケーションを利用しており、設定を確認する場合は注意が必要だ

 しかし、従来のWindowsアプリケーションの作法としては、プログラムをインストールしたフォルダにiniファイルを用意したり、ユーザーに依存しない設定を保存するために「HKEY_LOCAL_MACHINE」レジストリへ書き込みを行うのが一般的だった。Vistaがセキュリティ向上のためにシステムフォルダやレジストリへの書き込みを禁止しているとはいえ、既存のアプリケーション側が急に対応できるわけではない。このため、Vistaにはファイルとレジストリの仮想化機能が実装されている。

 ファイルとレジストリの仮想化機能は、アプリケーションがUACにより禁止されている領域への書き込みを行おうとした場合、自動的にユーザー固有の領域へリダイレクトする機能だ。たとえば、「Program Files」フォルダへの書き込みが発生した場合、ユーザーのプロファイル内へリダイレクトして書き込む。該当のアプリケーションがファイルを読み込む場合も、ユーザーのプロファイル内のファイルを読み込むようにリダイレクトされる仕組みだ。

ファイルとレジストリの仮想化機能が働くと、アプリケーションが書き込もうとしたファイルが自動的にリダイレクトされた位置に書き込まれる。読み込む場合も、リダイレクト先のファイルを読むようになる

 この機能により、Vistaに対応していないレガシーなアプリケーションも正常に動作できる。ただし、アプリケーションによっては、従来すべてのユーザーに共通の設定だったものが、各ユーザーごとに設定内容が異なるということが発生する点は注意が必要だ。

 仮想化したデータは、ファイルは「%localappdata%\virtualstore」以下に、レジストリの場合は「HKEY_CURRENT_USER\Software\Classes\VirtualStore」以下に保存されるので、既存のアプリケーションなどのカスタマイズを行っても変更が反映されない場合は仮想化に利用する領域を確認してみよう。

 なお、UACが無効になっている場合、ファイルとレジストリの仮想化機能は有効にならず、従来のOSと同様にシステムフォルダなどへの書き込みが行われる。ファイルとレジストリの仮想化機能を利用したアプリケーションがある状態でUACを無効にすると、ユーザー固有の設定はコピーされず、デフォルトの状態になる点は覚えておきたい。

Copyright © ITmedia, Inc. All Rights Reserved.

この記事が気に入ったら
ITmedia PC USER に「いいね!」しよう