seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

謎のフォルダショートカットを調べて。(また無駄なことを…。orz)

スタートメニューにフォルダのショートカットを作ったら、リパースポイントでもハードリンクでもない、不思議なフォルダになることに最近気が付いた。

気になりだしたら、いろいろ試したくなるのが人情というもの。

NTFSではフォルダのハードリンクは作れないし、リパースポイントであれば、そのリパースポイントをゴミ箱にいれると、参照先まで一緒にごっそりあの世行きになるが、この変なフォルダはそんなことはない。

どうやら、エクスプローラなどのシェルが検索するときに解析しているところはショートカットっぽい。
しかし、見た目、ショートカットではない。

コマンドプロンプトから試してみると、リパースポイントシンボリックリンクのように扱うことができないことが判明。ただのフォルダだ。

どうやら、ただのフォルダの中にDesktop.iniとtarget.lnkという普通のショートカットが入っているだけのようだ。

Desktop.iniはフォルダの外観をカイタマイズするIE4デスクトップ統合以降に作られた、クセものの機能。
このDesktop.iniがいるフォルダをエクスプローラは、特別なショートカットとみなすようだ。

ためしに、新規フォルダを作成し、このDesktop.iniをコピーして、target.lnkを作ってみる。

おかしい。
…機能しない。
ただのフォルダにしかみえない。

ネットをいろいろ探すと、vbsから、この手のフォルダを作成する技などが載ってる英語ページを発見。

スクリプトを解析。

フォルダを作成して、Desktop.iniを作成して、target.lnkを作成する。それだけ。

んー?

フォルダの属性をリードオンリーにしている?

コレカ!!

[結論]

フォルダのニセ・シンボリックリンクを作成したい場合は、

1. フォルダを作成する
2. Desktop.iniをコピる。もしくは、以下の内容にする。
[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
Flags=2
3. Desktop.iniにシステム属性、隠し属性をつける。
attrib +S +H Desktop.ini
4. targetという名前のフォルダのショートカットを作成する。
5. フォルダの属性をリードオンリーにする。
attrib +R フォルダ名

これで、できあがり。

これ、なんかの役に立つのかなァ。
....また、無駄なことをやってしまった。orz

ちなみに、本物のハードリンクを作成したい場合は
WindowXPならば、fsutil hardlink create... で可能。
フォルダのシンボリックリンク風味は、sysinternalsのjunctionというユーテリティで、NTFSリパースポイントを利用して作成可能。ただし、前述のとおり、リパートポイントで作成されたフォルダは実体を共有するので、片方をゴミ箱にいれると他方もゴミ箱にはいって、一緒にあの世に行くので注意。(リパースポイントを削除することにはならないので注意。)