2016年7月3日日曜日

PC program files リダイレクト先

Windows には、昔から、 ユーザーが誤ってシステムを不安定にする事が無い様な仕組みが備わっています。
特に、導入済みのソフトやアプリが正常に動く様に、
C:¥program files に配置されたファイルをユーザーが操作しようとしても、
これを阻止する仕組みが働きます。


所謂、 OS のリダイレクト機能 と呼ばれる仕組みです。

C:¥program files に配置されたファイルにアクセスし、 これを編集しても、
実際には ファイルに 編集は反映されず、
別の場所に用意された ダミー のファイルが作成される のですね。
元のファイルは、何事もなかったかの如く、以前のまま! です。

頭では理解していますが、
どうも、悩みながら事に当たっている時 等は 変更出来た! と勘違いしてしまいます。

と言うのは、見せ掛け上、 このダミーのファイルがユーザーに表示されているからです。
そう、 この仕組みの名称を思い出して下さい。
リダイレクト、 つまり、 読み替え です。 

管理者権限を持つユーザーも、通常は、普通のユーザーと同じレベルで動いています。
例えば、 C:¥program files¥AppSample¥Item にあるファイルを編集したいとします。

正解は、 管理者権限 に昇格して 操作する! (管理者としてエディタ等を起動) ですが、
これを忘れて、 ただの管理者のまま 普通に操作 (編集) すれば、
以下の場所に 新たに ファイルが作られる だけ です。

C:¥Users¥UserName¥AppData¥Local¥VirtualStore¥Program Files¥AppSample¥Item

言い換えれば、 この元のファイルにアクセスする時、
読み込みでは 正確に 対象ファイルを読みますが、 書き込む時に、
昇格無し管理者 では 
C:¥Users¥UserName¥AppData¥Local¥VirtualStore¥Program Files¥AppSample¥Item
昇格済み管理者 なら C:¥program files¥AppSample¥Item
へファイルが OS によって転送される訳です。
勿論、 C:¥program files¥AppSample¥Item にあるファイルにアクセスしている筈なのですが ね。

そう、エディタでなく、 自分のプログラムからアクセスする時も同じです。
特殊な管理者昇格済みトークンでの 書き込み が必要になります。.

¥AppData¥Local¥VirtualStore にあるファイルは、ごく普通のファイル(アクセス制限は無し)ですから、
編集も名称変更も削除も 勿論! 自由です。



さて、 この仕組みは、 Vista 以降導入された Windows の UAC (UserAccountControl) の仮想化機能です。

UACによる仮想化では、
  ファイルの場合、 %SystemRoot%、%ProgramData%、%ProgramFiles% へのアクセスが仮想化され、
               %LoadlAppData%¥VirtualStore にリダイレクト
  レジストリの場合、 HKLM¥Software が、HKCR¥Software¥Classes¥VirtualStore¥Machine¥Software にリダイレクト
と言うルールがあります。



いくら、慌てているからと言っても、 このルールを忘れていると、 貴重な時間を潰す事になります。  ... 私の様に ね。.



0 件のコメント:

コメントを投稿