Windows Vista/7

Windows Vista/7 のファイルの仮想化(Virtualization)について

最終更新日:2009/9/14

Windows Vista からは、ファイルとレジストリの仮想化という機能が実装されています。この機能は、具体的にはユーザーの操作によって特定のファイルやレジストリエントリに書き込みが発生した場合に、自動的に別の場所に書き込む機能です。ユーザーアカウント制御(UAC) が有効になっていて、プログラムを管理者として実行していない場合にこの機能が働きます。
(アプリケーションのマニフェストで実行権限を指定している場合を除く)

書き込もうとした場所仮想化によって実際に書き込まれる場所
%ProgramFiles%
(初期値:C:\Program Files)
%LOCALAPPDATA%\VirtualStore\Program Files
%ProgramData%
(初期値:C:\ProgramData)
%LOCALAPPDATA%\VirtualStore\ProgramData
%SystemRoot%
(初期値:C:\Windows)
%LOCALAPPDATA%\VirtualStore\Windows
HKEY_LOCAL_MACHINE\SOFTWAREHKCU\Software\Classes\VirtualStore\Machine\Software

例外ファイル:.exe、.dll、.sys
例外キー:HKLM\Software\Classes、HKLM\Software\Microsoft\Windows、HKLM\Software\Microsoft\Windows NT

この機能によってどのようなことが起こるかというと、たとえば設定ファイル(iniファイル)を実行ファイル(exeファイル)と同じフォルダや Windows フォルダに保存しているプログラムや、データを実行ファイルと同じフォルダに保存しているプログラムで、ユーザーが意識しているフォルダと実際に保存されるフォルダが違うことになります。ただし、API の WritePrivateProfileString を使った場合などに、仮想化されないこともあります。

例)
C:\Program Files\MyApp\Data\MyApp.mdb … (1)
にデータが保存されると思っていたのに、実際には、
C:\Users\<ユーザー名>\AppData\Local\VirtualStore\Program Files\MyApp\Data\MyApp.mdb … (2)
に保存されます。

この結果、バックアップは (1) ではなく (2) のファイルをとっておく必要があります。これを知らないと、まったく関係ないファイルのバックアップを取り続けることにもなりかねません。

また、1つの PC に複数のユーザーでログオンし、データは共通のものを使うということも Windows XP では普通にできましたが、Vista では (2) のフォルダがユーザーごとに違うため、ユーザーごとに違うデータを利用することになり、データの整合性が保てなくなってしまいます。

さらに、同じユーザーであっても、UAC を無効 にすると仮想化の機能が働かなり、データの参照先が変わってしまいます。UAC を無効にしたタイミングで、「データが消えた!?」ということにもなりかねません。

ところで、ポリシーの中には、UAC を有効にしたままでも仮想化は無効にする設定項目があります。

ローカルセキュリティの設定

レジストリでの該当値は
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System のエントリEnableVirtualization
参考)ユーザーアカウント制御(UAC)に関するセキュリティポリシー一覧

この設定をすれば Windows XP と同じようにユーザーが意識しているフォルダにデータを書き込もうとしますが、UAC の機能によって上の表に載せたフォルダへの書き込みは制限される(管理者権限のあるユーザーでも、制限ユーザと同様の制約を受ける)ため、エラーが発生して書き込みができなかったり、エラーは発生しないが書き込みも行われないという事態が起こりえます。よって、書き込みを行なうフォルダのアクセス権の設定を、制限ユーザでも書き込みができるように変更する必要があります。

アクセス許可

Windows 7 では、仮想化によって別のフォルダーに保存されたファイルがあるフォルダーをエクスプローラーで開くと、コマンド バーに「互換性ファイル」というコマンドが表示されます。そのコマンドをクリックすると、仮想化によってファイルが保存されたフォルダーが開きます。

仮想化

仮想化


<関連URL>

  • Windows Vista のファイルおよびレジストリの仮想化に関する一般的な問題