VistaのシンボリックリンクとVirtualStore

一般には至極どうでもいい話です。

Vistaではmklinkコマンドで従来のハードリンク・ジャンクションに加えてシンボリックリンクが張れるようになりました。シンボリックリンクの動作はジャンクションとほぼ一緒ですが、ところどころ違う部分もあります。
・ネットワークドライブにも張れる
・相対パスでも張れる
・エクスプローラ上のプロパティからリンク元が辿れる
・エクスプローラでフォルダサイズを表示してくれない
・通常は2000/XPからアクセスできない(フリーのドライバがありますが)
・xcopyの/L/Bオプションでシンボリックリンク自体をコピーできる(なぜかrobocopyには相当するオプションがない...)

で、シンボリックリンクが使えるとなるとProgram FilesやUsersを別ドライブに移してリンクを張りたくなるのが人情(自分だけ?)。でもここにひとつ問題点がありました。
Vistaのシステムフォルダ(WindowsやProgram Files)はセキュリティ保護の名目でアクセス権が厳しく設定されています。これによって、今までフリーソフトでよくある「設定ファイルを実行ファイルと同じフォルダ内に作る」ことなどが出来なくなりました。で、この救済策として仮想化と呼ばれるリダイレクトがVistaによって行われることになってます(詳しくは「VirtualStore」などでググれば出ます)。
ところがどうもProgram FilesやUsersをシンボリックリンクにしておくと、このVirtualStoreへのリダイレクトが効かなくなるっぽいのです。より正確に言えばシステムパーティションでないと効かないようで、レジストリ変更でUsersを別パーティションへ移してもリダイレクトされなくなります。システムパーティション内のフォルダに張ったシンボリックリンクは有効ですが、中身を別ドライブへ移せないのだからあまり意味がありません。
解決策はパーティション分けを諦めるか、仮想化に頼らなくても済むようにUACを無効にするか...シンボリックリンクが「本当にそこにファイルがあるように」振舞えばいいと思うんですが、仮想化はハードリンクみたいに同一ドライブじゃないとまずい機能なんですかね?

TrackBack URI : http://reharmonize.net/200701/198/trackback

Leave a Reply