BLOGTIMES
2015/01/27

UAC とファイルシステムの仮想化

  windows 
このエントリーをはてなブックマークに追加

UAC 画面 - UAC とファイルシステムの仮想化

古いアプリを使っていると %ProgramFiles% 内に保存されているはずのファイルがしばしば変なところに移動されていることがあって困ることがあります。この現象についてちょっと調べてみたら UAC のファイルシステムの仮想化という機能によるものだということが分かったのでメモ。

結論から述べるとファイルは %LocalAppData%\VirtualStore に保存される仕様になっているので、ファイルが見当たらない時にはここを真っ先に探せばOKです。移動されているのではなく、透過的にリダイレクトされる仕組みでした。

UAC と VirtualStore フォルダの関係

Windows Vista 以降 ユーザー アカウント制御*1 (UAC) が導入されて、システムに変更を加えようとしたり、管理者権限でプログラムを実行しようとしたりすと、画像のように画面が暗転してユーザーに確認を求めるダイアログが出るようになりました。当初は使い勝手的にかなり叩かれた機能でしたが、この UAC ざっくりと述べれば、管理者アカウントを使っている場合でも、管理者権限が必要ないときにはプログラムは通常ユーザーとして実行され、必要があるときだけユーザーの確認をとって、はじめて管理者権限に切り替わるようになるという画期的な機能でした。

ただ、古いプログラムの中には恒常的に %ProgramFiles%, %Windir% を読み書きするようなものもあり、このようなプログラムとの互換性のためにレジストリやファイルシステムの仮想化という機能がついています。つまり、%ProgramFiles%, %Windir% への書き込みを別の場所に自動的にリダイレクトして、UAC の目的を達成しながら、なるべく後方互換性を確保しようという機能です。この書き込み先が最初に書いた %LocalAppData%\VirtualStore になるようです。プログラムからは %ProgramFiles%, %Windir% に書き込んだとしても、実際は %LocalAppData%\VirtualStore 以下に書き込まれるというわけです。このあたりはちょっと分かりづらいですが、 MS のサイトの以下の部分にきちんと解説がありました。

UAC のアーキテクチャ

Windows 7 には、UAC 準拠ではないアプリケーション、および正常に実行するために管理者のアクセス トークンが必要なアプリケーション用に、ファイルおよびレジストリの仮想化テクノロジが組み込まれています。仮想化によって、UAC 互換でないアプリケーションでも Windows 7 との互換性が確保されます。UAC 準拠ではない管理者アプリケーションが、Program Files フォルダーなどの保護されているディレクトリに対して書き込みを試行すると、UAC により、変更対象のリソースの仮想化ビューがそのアプリケーションに独自に与えられます。この仮想化コピーは、ユーザーのプロファイル内に保持されます。この処理方法により、非準拠のアプリケーションを実行するユーザーごとに、仮想化ファイルの個別コピーが作成されます。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/7358
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン