Windows Tips

Windows の VirtualStore 機能

投稿日:2018年10月5日 更新日:

Windows Vista 以降には、VirtualStore という仕組みが導入されています。

1. VirtualStore の機能

まず、VirtualStore というのがどのような機能なのか説明します。

例えば、あるアプリケーションが

C:\Program Files (x86)

といった「システムに関わるフォルダ」内に何かを書き込む処理を実行した際、アクセス権限がない場合にはエラーにするのではなく、代わりに

C:\Users\<ユーザー名>\AppData\Local\VirtualStore\Program Files (x86)

というフォルダに読みかえて、書き込みを続行する機能です。この時、アプリケーションはフォルダがすり替えられていることに気付きません。Windows が面倒を見てくれます。

以下のフォルダが対象になります。

  • %ProgramFiles% (= C:\Program Files)
  • %ProgramFiles(x86)% (= C:\Program Files (x86))
  • %WINDIR% (= C:\Windows)
  • %WINDIR%\system32
  • HKEY_LOCAL_MACHINE\Sofware (レジストリ)
  • これ以外にもあるかも…

最後の項目がそうですが、同様の処理がレジストリへの書き込みに対しても行われます。

C:\Users\<ユーザー名>\AppData は隠しフォルダですので、フォルダーオプションで「隠しファイル、隠しフォルダー、および隠しドライブを表示する」にチェックを入れないと見れません。

 

フォルダオプション

2. VirtualStore が導入された経緯

Windows Vista から権限周りが厳しくなったため、今まで一般ユーザーが C:\Program Files (x86) といった「システムに関わるフォルダ」に書き込みできることを前提にしていたアプリケーションが動かなくなる可能性があり、これを回避するために実装された機能です。

例えば、よくあったのが、C:\Program Files (x86) 直下のアプリケーションフォルダ内に、各ユーザーの設定ファイルやデータファイルをすべて作成してしまうアプリケーションです。

一般ユーザーがこのアプリケーションを使って設定変更を行うには、当然 C:\Program Files (x86) への書き込み権限が必要になります。昔はこれが許されていました。しかし、アプリケーションの開発者に悪意があれば、システムをどうにでも変更できてしまい非常に危険です(悪意がなくてもミスで……ということも考えられます)。

というわけで、Vista 以降では権限周りが厳しくなったのですが、例えば ユーザー用の設定ファイルを作成するのであれば、そのユーザーのホームフォルダー内のどこかに作成すればよいだけです。VirtualStore はこれを代わりにやってくれていると言うこともできます。

時々、VirtualStore の動作では問題が起きてしまう古いアプリケーションがありますが、その場合は管理者権限でアプリケーションを実行するなどの対策を行う必要があります。

3. ローカルセキュリティポリシーで無効にする

ローカルセキュリティポリシーで、有効/無効を切り替えることができます。

※ Windows 10 Home には、ローカル セキュリティ ポリシーはありません。

デフォルトでは有効になっていますが、無効にする場合は以下の手順で行います。

(1) [コントロールパネル] – [管理ツール] – [ローカル セキュリティ ポリシー] を開きます。

(2) 左側の [ローカル ポリシー] – [セキュリティ オプション] をクリックして表示します。

(3) 「ユーザー アカウント制御:各ユーザーの場所へのファイルまたはレジストリの書き込みエラーを仮想化する」を右クリックして [プロパティ] を開きます。

ローカル ポリシー

(4) [無効] を選択して [OK]ボタンをクリックします。

プロパティ

以上です。

上記ウィンドウの [説明]タブでは、この設定について説明されています。

 

説明タブ画面

ポリシーの名前が「ユーザー アカウント制御:各ユーザーの場所へのファイルまたはレジストリの書き込みエラーを仮想化する」とあるように、VirtualStore は ユーザー アカウント制御 (User Account Control, UAC) 機能の一部という位置付けのようです。

 

ユーザー アカウント制御というのは、管理者権限が必要な操作(システム設定の変更やアプリケーションのインストールなど)が自動的に実行されてしまわないように、ダイアログを表示するなどして確認(通知)操作を挟むための機能です。

4. タスクマネージャーでプロセス毎の「UACの仮想化」を確認する

タスクマネージャーを使うと、本機能が有効になっているプロセス(アプリケーション)を確認することができます。

(1) タスクバーを右クリックして、「タスクマネージャー」を選択します。

タスクマネージャー

(2) [詳細]タグを開いて、列の先頭部分を右クリックし「列の選択」をクリックします。

(3) [UACの仮想化] にチェックを入れて [OK] ボタンをクリックします。

UACの仮想化チェックボックス

(4) [UACの仮想化]列が追加されます。

UACの仮想化の列が追加される

上記画面では「有効」になっているプロセスが1つありますが、このプロセスは以下のフォルダ内を使っているはずです。

C:\Users\<ユーザー名>\AppData\Local\VirtualStore
※「UACの仮想化」という名前ですが、ユーザーアカウント制御 (UAC) が対象としている「管理者権限が必要な操作」において、本来エラーになるはずのところを、予め用意したフォルダを使って仮想的に処理を続行させるという意味でこの名前になっているのでしょう。

5. おわりに

「パソコンを入れ替えるためにデータをコピーする」「ユーザーデータをバックアップ」といった際には、ひょっとすると C:\Users\<ユーザー名>\AppData\Local\VirtualStore 内にも重要なデータが作成されているかもしれません。忘れないようにしましょう。

📂-Windows Tips

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windows

ツールパネルウィンドウが畳まれた状態で Adobe Acrobat Reader DC を起動する

Adobe Acrobat Reader DC を起動した時、右側に表示される「ツールパネルウィンドウ (Tools pane)」が邪魔に感じたことはないでしょうか? ツールパネルウィンドウというのは …

スタートメニューにテキストファイルは置けません

Windows 10 のスタートメニューには、テキストファイルをピン留めすることができません。 「Windowsキーだけでアクセスできる」というかなり優遇されたエリア(しかも結構広い!)ですが、ここに …

Windows

明示的に Windows 10 のバージョンを上げる(Windows 10 更新アシスタントを使う)

Windows 10 の新しいバージョンがリリースされると、Windows 10 がインストールされた世界中のパソコンに対して順次適用(更新)されていきます。割と長い期間を掛けて適用していくため、人に …

ICTリテラシー

Windows、Mac (macOS) で通信量を確認する方法

目次1. はじめに2. Windows で通信量を確認する方法使い方メモ3. Mac (macOS) で通信量を確認する方法4. おわりに 1. はじめに 従量制で課金される環境でパソコンを使用する場 …

Windows

【Windows 10】ファイル・フォルダ削除時に確認メッセージを表示する

Windows を触っていて、意図せずファイルやフォルダを削除したことはないでしょうか? 私はあります。 通常 ファイル・フォルダを削除するとゴミ箱に残るのでまだよいですが、外付けストレージ内のファイ …