re: リンクいろいろ [その他]
元ネタ:リンクいろいろ
Windows限定かつ曖昧な知識で。
- ハードリンク
- リパースポイント (再解析ポイント)
- パスの解析の途中に別の処理を割り込ませる方法。シンボリックリンク~マウントポイントの実装に使われている。
- シンボリックリンク/ジャンクション/マウントポイント
- 他のファイルやディレクトリ,ボリューム名を内部 (BACKUP_REPARSE_DATA) に持っていて,それぞれへのアクセスを置き換える物。 早い話が,ファイルシステムネイティブなショートカットファイル/ディレクトリ。
- 違いは,
- ジャンクション/マウントポイント
- 実は一緒の物。絶対パスで保持していて,Windows 2000以降で利用可能
- 作成するにはDeviceIoControl APIを使う
- Windows Vistaのmklinkまで,コマンドプロンプトから作成する方法はなかった
- 対象は,同一PCのみ
- ネットワーク越しでジャンクションにアクセスした場合,サーバー側で再解析が起こる
- ファイルへのジャンクションは,不可能ではない物の,BackupWrite API使うとか,パッチ当てるとか,裏技でしかできない
- シンボリックリンク
- 絶対パスまたは相対パスで保持していて,Windows Vistaで利用可能
- 作成するにはCreateSymbolicLink APIを使う
- mklinkを使って,コマンドプロンプトから作成可能
- 対象は,同一PCの他,ネットワーク越しのファイルへのリンクも可能
- ネットワーク越しでシンボリックリンクにアクセスした場合,クライアント側で再解析が起こるので,本来のリンク先にネットワーク越しではアクセスすることができない
- 管理者権限が必要
- subst
- リパースポイントと違い,ドライブにディレクトリを割り当てる方法。
こんなんでよいっすかね?>シャノンさん
タグ:Windows
2008-05-27 18:32
コメント(4)
トラックバック(0)
スバラシー。
> ジャンクション/マウントポイント
> 実は一緒の物。
ターゲットがディレクトリの場合はジャンクション、ドライブの場合はマウントポイント?
> シンボリックリンク
ジャンクションと違い、ファイルに対しても可能。
> 作成するにはCreateSymbolicLink APIを使う
たぶん DeviceIoControl でも作れる。
> 管理者権限が必要
まぢ?
> subst
NTFS の機能ではなく OS の機能。
DefineDosDevice で同じことができる。
その他のリンク:
ショートカット
リンク先の情報を持ったファイル。NTFS の機能ではなくシェルの機能。
対象は他のコンピュータでも、ファイル以外のシェルオブジェクト(マイコンピュータとかコントロールパネル内のアイテムとか)も可能
作るには IShellLink インターフェイスを使う
Windows Installer が作るショートカットはアドバタイズショートカットと呼ばれる特殊なもの
フォルダのショートカット:
名前に反して、上記のショートカットのフォルダ版ではない
http://d.hatena.ne.jp/seraphy/20060209
by シャノン (2008-05-27 19:14)
> ターゲットがディレクトリの場合はジャンクション、ドライブの場合はマウントポイント?
一応は……。リパースタグが同じなので,区別するにはリパースバッファの中身までみないとわかりません。
DIRコマンドでは,まとめてって表示していますし。
>> 作成するにはCreateSymbolicLink APIを使う
> たぶん DeviceIoControl でも作れる。
作れます。
さらに面倒くさくなりますが,BackupWriteでも作れます。
>> 管理者権限が必要
> まぢ?
mklink /Dとかすると,
この操作を実行するのに十分な特権がありません。
って怒られます。CreateSymbolicLinkではエラーコード1314が返ります。
昇格したコマンドプロンプトで実行すると,どちらの方法でもちゃんと作成できます。
正確には,SE_CREATE_SYMBOLIC_LINK_NAME特権を持っていることになります。
デフォルトではユーザーはこの特権を持っていないため,昇格必須になります。
このあたりは,emkさんのリンク/ジャンクション作成ツール
http://homepage1.nifty.com/emk/symlink.html
のソースコードで知りました。
>> subst
> ショートカット
> フォルダのショートカット:
追記,ありがとうございます。
by YuO (2008-05-27 21:34)
リパースポイントというのはファイルやディレクトリにメタデータを持たせる仕組みのことで、
そのメタデータをどう解釈するかはOS(というか入ってるフィルタ)次第、って話なので、
> 他のファイルやディレクトリ,ボリューム名を内部 (BACKUP_REPARSE_DATA) に持っていて,それぞれへのアクセスを置き換える物。
このBACKUP_REPARSE_DATAというのは誤解を招くかなぁと。
BackupWriteを使うときにリパースポイントのデータを指定するためのただのタグですから。
by れい (2008-05-30 07:09)
>> 他のファイルやディレクトリ,ボリューム名を内部 (BACKUP_REPARSE_DATA) に持っていて,それぞれへのアクセスを置き換える物。
> このBACKUP_REPARSE_DATAというのは誤解を招くかなぁと。
> BackupWriteを使うときにリパースポイントのデータを指定するためのただのタグですから。
うまい表現が見つからなくて,この表記にしました。
私の場合,DeviceIoControl + FSCTL_*_REPARSE_POINTやBackup*といったAPIを使って見える仕組みまでしかわかっていないので,これ以上の感覚を持てないのですよ……。
by YuO (2008-06-05 12:03)