<p>Windows Vista から、ファイルとレジストリの仮想化という機能が実装されている。<br /> アプリケーションの仮想化の際にユーザーごとの設定を意識せずに持てるなどの利点があるようだが、今までの環境に慣れ親しんだ企業ユーザーなどにとっては管理コストの増大になっている。またユーザーに意識させず行われることと既存のプログラムが対応していない事などの要因で、この機能は様々な場面で問題を起こしていることがある。まさに「小さな親切大きなお世話」的機能になっている。</p>
<p>機能の内容<br /> 権限を有しないものが該当するフォルダやレジストリに対して書き込みを行うと、自動的にリダイレクトされ別の場所に書き込む機能である。管理者権限を有していてもユーザーアカウント制御(UAC)がONになっていて、さらに昇格していないとこの機能が働く。(アプリケーションマニフェストで指定されている場合は除かれる模様)</p>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr><th>書き込もうとした場所</th><th>仮想化によって実際に書き込まれる場所</th></tr>
<tr>
<td>%programfiles%<br /> (初期値：C:\Program Files)</td>
<td>%LOCALAPPDATA%\VirtualStore\Program Files</td>
</tr>
<tr>
<td>%systemroot%<br /> (初期値：C:\Windows)</td>
<td>%LOCALAPPDATA%\VirtualStore\Windows</td>
</tr>
<tr>
<td>%programdata%<br /> (初期値：C:\ProgramData)</td>
<td>%LOCALAPPDATA%\VirtualStore\ProgramData</td>
</tr>
<tr>
<td>HKEY_LOCAL_MACHINE\SOFTWARE</td>
<td>HKCU\Software\Classes\VirtualStore\Machine\Software</td>
</tr>
</tbody>
</table>
<p>※参考URLによると%systemroot%も仮想化の対象と取れるが、実験したところ仮想化されていない模様。</p>
<p>無効化の方法(下記の2通りの方法のいずれかで)</p>
<ol>
<li>コントロールパネルからの無効化<br /> コントロール パネル\システムとセキュリティ\管理ツール\ローカルセキュリティーポリシー<br /> 上記をクリックするとMicrosoft Managiment Console(MMC)が起動する。<br />下記の場所の設定を変更する。<br /> コンピュータの構成/Windowsの設定/セキュリティの設定/ローカルポリシー/セキュリティーオプション<br />&nbsp;「ユーザーアカウント制御:各ユーザーの場所へのファイルまたはレジストリの書き込みエラーを仮想化する」<br /> を有効から無効に変更<br />※ローカルセキュリティーポリシーのコマンドはgpedit.msc</li>
<li>レジストリからの無効化<br /> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System<br /> EnableVirtualization の値を1から0に書き換える</li>
</ol>
<p>■参考</p>
<ol>
<li>Windows Vista または Windows 7 のファイルおよびレジストリの仮想化に関する一般的な問題<br /> <a href="http://support.microsoft.com/kb/927387/ja">http://support.microsoft.com/kb/927387/ja</a></li>
<li>ユーザー アカウント制御<br /> <a href="http://technet.microsoft.com/ja-jp/library/cc772207(WS.10).aspx">http://technet.microsoft.com/ja-jp/library/cc772207(WS.10).aspx</a></li>
</ol>