Previewの、特権不要でのシンボリックリンク作成に対応。v1.06v1.05に同梱のドライバではリンク先が絶対パスで指定されたシンボリックリンクのサブディレクトリへ正常にアクセスできない(たとえば、C:\testへのリンクをD:\test2という名前で作成したとき、D:\test2\123へのアクセスがC:\test\123ではなくC:\testに読み替えられてしまう)問題を修正。Vista/7ではこのドライバは不要なので関係ありません。アクセス時の問題なので旧バージョンで作成した絶対パスへのリンクを作成し直す必要はありません。v1.05シンボリックリンクの作成時に、リンク先を相対パスで指定すると不正なリンクが作成されてしまう問題を修正。v1.04で作成されてしまった不正なリンクは、単にdelやrmdirで削除できます。v1.05で作り直してください。Vistaのシンボリックリンクに対応。2000/XP上で作成することもできます。注意事項をご覧ください。2000にはzip形式フォルダが標準で存在しないので、x86版の圧縮形式をcabに変更。作成できるリンクはハードリンクだけではなくなったので「ハードリンク/ジャンクション作成ツール」から改名。Vistaに関して説明を追記。Toolsへのリンクを追加。v1.0364bit版を作成。2000以降でしか動かないのでシフトJISにない文字を含むファイル名も扱えるようにUnicodeコンパイルに変更。v1.02環境によってはntfs.sysの発見に失敗する問題を修正。この修正のためにファイルへのジャンクション作成では非公開APIを使うようになりました。lzhだったので導入を断念したという声があるので圧縮形式をzipに変更してみた。ちなみに*.msiは「プログラムの追加と削除」を「別ユーザーで実行」すればAdministratorでログオンしなくてもインストールできます。v1.01日本語のリンク先が表示されなかった問題を修正。XPでも動作するようなので記述をいくつか追加・変更。ついでにリンク切れを修正。これは何?ハードリンクやジャンクションを作成するツールです(そのまんま)。Vistaのシンボリックリンクにも対応しました。2000/XP上でシンボリックリンクを作成することもできます。2000標準の付属品では、ハードリンクを作ることはできませんし、ジャンクションはドライブに対してしか張ることができません。XPではfsutilコマンドでハードリンクを作成できますが、Administrator権限のあるアカウントでしか使えません。XPでもハードリンクを作成するためにAdministrator権限は必要ありません。fsutilコマンドの機能の中にAdministrator権限を必要とするものがあるためだと思われますが、一部の機能のためにコマンド全体を使用禁止にするとはなんとも手抜きな設計です。そこで作成用のツールを作りました。Vistaではmklinkコマンドで、カーネルがサポートしているあらゆる種類のリンクを作れるようです。ハードリンクUNIXにはハードリンクというものがあって、1つのファイルに複数の名前を付けることができます。ファイルの中身は共用して名前だけを増やすので、コピーした場合と比べてディスク領域を節約できる。片方の名前で開いたものを更新すると、ほかの名前で開いたものにも自動的に反映される。NTでは3.1の時代から使うことができました。ジャンクションこれまたUNIXにはシンボリックリンクという機能があって、ファイルに別名をつけることができます(別名をつけることを「リンクを張る」と表現します)。ハードリンクとの違いはディレクトリにも張ることができるドライブをまたいで張ることができるハードリンクではすべての名前は対等なのですべての名前を削除するまでファイル本体が削除されることはないが、シンボリックリンクは別名に過ぎないので、本名を削除した時点で本体が削除されてしまい、別名で参照することもできなくなる。リネームして同名のファイルを作り直すと、ハードリンクはリネームされたファイルを指し、シンボリックリンクは同名で作り直されたほうのファイルを指すようになる(ハードリンクの仕様はアプリケーションのバックアップファイルの作成方法によっては不便かもしれない)。2000/XPではファイルシステム(NTFS)にリパースポイントという機能が追加され、このリパースポイントを利用してジャンクションというシンボリックリンクに非常によく似た機能がサポートされています。シンボリックリンクジャンクションは、UNIXのシンボリックリンクと比べると標準ではファイルに張ることができない。ネットワークドライブやUNCパス上のファイルには張れない。Vistaではこれらの制限をすべて解消した本物のシンボリックリンクが新たに導入されました。Vistaのシンボリックリンクもリパースポイントによって実装されていますが、ジャンクションとはリパースタグ(リパースポイントの種類を識別する数値)が異なるため互換性がありません。このツールでアクセスした場合、ネットワークドライブやUNCパス上のリンクをたどれないという制限があります。XPはSMB2に対応していないためです。リンク先がネットワークドライブやUNCパスであるようなリンクでもリンク自体がローカルドライブにあればアクセスは可能です。リンクの種類が無効なため、リンク先に接続できません。」というエラーメッセージで失敗します。ショートカットWindowsのショートカットはリンク先が中に書かれた単なるファイルです。そのためハードリンクやジャンクションと比べると、アプリケーションが自分でショートカットかどうか判別して、リンク先を開きなおさなくてはならない。拡張子は.lnkでなくてはならない。barでfooに対してbarという名前のハードリンクを作成します。barでfooに対してbarという名前のシンボリックリンクを作成します(v1.03以前と異なるので注意してください)。Vistaのシンボリックリンクを作成はできますが、作成したリンクをたどれません。そこでシンボリックリンクへのアクセスを提供するドライバ(symlink.sys)と、ドライバをロードするためのツール(senable.exe)を作成して同梱しました。v1.03以前の同名のドライバおよびツールとは全く別物です。senable.exeは管理者権限を持ったユーザで実行する必要がありますが、ドライバをロードしてしまえば通常ユーザの権限でもシンボリックリンクにアクセスできます。Vistaでは当然ながらドライバは不要です。Vistaではsenable.exeは使用しないでください。Editionでは64bit版をご利用ください。32bit版のsenable.exeは正常に動作しません。v1.03以前のドライバはntfs.sysにパッチを当てるとすぐにアンロードしていたので、パッチを当て間違えない限りそれほど危険はありませんが、v1.04からは常駐してNTFSボリューム上のすべてのファイルアクセスに割り込むようになったので、はるかに危険が増しています。したドライバのバグであっさりブルースクリーンが出てクラッシュしたり、最悪の場合書き込むファイルが片っ端から壊されていく可能性すらあります。どのような不具合が生じても当方は一切関知しませんので、symlink.sysドライバは自己責任でご利用ください。すべてのファイルアクセスをフックするというドライバの性質上、ドライバをロードすると振る舞い検知するセキュリティソフトに警告される場合があるようです。ハードリンクやジャンクションはドキュメントされた機能でドライバは使用しないので、全く問題なく利用できます。Vistaではシンボリックリンクの使用にドライバは不要なので、これも全く危険はありません。2000/XPでもドライバは不要なので、危険はありません(アクセスできなくてはあまり意味がないと思いますが)。標準では、ドライバはWindowsを起動するたびにロードし直す必要があります。install」でブート時にドライバがロードされるように登録することができますが、ドライバにバグがあってクラッシュしたらセーフモードでも起動できなくなります。最低でも、ふつうにロードして一通り動作を確かめてから登録するようにしてください。登録直後の再起動でクラッシュした場合は、電源投入時にF8を押して「前回正常起動時の構成」を選ぶことで復旧できるかもしれません。一度でも正常に起動した後でクラッシュするようになった場合は、当然この手は使えません。回復コンソールから復旧を試みるか、素直にリカバリしてください。delete」と入力してください。ドライバがすでにロードされている場合は、Windowsを再起動するまで削除は完了しません。ファイルに対するジャンクションジャンクションはフォルダに対してしか張ることができません。ファイルに対して張ろうとするとエラーになります。v1.03まではメモリ上のntfs.sysにパッチを当ててファイルへのジャンクションを作成する機能がありましたが、シンボリックリンクへの対応に伴いこの機能は廃止されました。新規に作成はできませんが、ファイルへのジャンクションへアクセスするのにntfs.sysへのパッチは不要なので、作成済みのジャンクションへのアクセスは(Microsoftがntfs.sysの動作を変更していない限り)問題ないはずです。2000/XP以降専用です。2000/XP以降専用なので手を抜きました)。2000以降で可能です。2000/XPでのアクセスには専用のドライバが必要です(シンボリックリンクへのアクセス参照)。Vistaでは標準でmklinkコマンドが存在するので必要ないと思いますが、いちおう動作します。蛇足ですが、mklinkコマンドの引数の順番はlnコマンドと逆なので注意してください。コマンドライン用のツールです。コマンドプロンプトを見たことのないという方にはおすすめできませんというか使えないでしょう。ちなみにこれは単なる私の手抜きのせいなので、まともなGUIツールを誰かが作ってくれれば使えます。Extensionをインストールしての運用を強くおすすめします。2000では、異なるドライブに対してジャンクションを張ると、そのジャンクションの下にあるファイルやフォルダはエクスプローラから削除できません(ジャンクションを張った先の本来のパス経由なら削除できます)。これは実際には異なるドライブにあるものをごみ箱に入れようとして失敗するためです。ようするにエクスプローラのバグです。2000純正の「ディスクの管理」を使って作成したマウントポイントでも同じ現象が発生しますし、コマンドプロンプトからは問題なく削除できます。XPではこのバグは修正されましたが、ごみ箱へ入れるためにドライブ間でコピーを行うというかなり本末転倒な動作を行うようです。ドライブ間のごみ箱の容量の違いのために、削除に失敗することがある模様です。2000/XPのエクスプローラはリンクの存在を認識しないので、ジャンクションやシンボリックリンクのフォルダを削除してごみ箱を空にすると、リンク先のファイルがすべて消え去ります。削除はコマンドラインからrmdirコマンドで行ってください。Extensionなど、この問題に対策したツールのインストールをお勧めします。Vista以降でこの問題は修正されました。NT/2000/XPでシンボリックリンクが利用できるという記述をよく見かけます。それはこのツールの説明かもしれませんし、上記のリパースポイント/ジャンクションについての説明である場合もありますが、単なる誤解に基づいたものもよく見かけます。いう誤解について解説してみます。Vistaでは本当にシンボリックリンクが使えます。ハードリンクとシンボリックリンクの区別がついていないもっともよくあるパターンがこれです。なかには「シンボリックリンクをサポートしていないとPOSIX互換は名乗れないから」ともっともらしいことを書いているところもありますが、POSIXではハードリンクは規定されていてもシンボリックリンクは規定されていません。2000/2003/XP版がディレクトリに対して張るのはジャンクションです。名前もリンク作成シェル拡張に変わっています)。Vistaのシンボリックリンクが登場するまでは、ジャンクションのことをその類似性からあえてシンボリックリンクと呼ぶことがよくあったようですが、今となっては紛らわしいだけでしょう。utilitiesに付属のreadme.wriにはlnコマンドでシンボリックリンクを作成するための-sオプションが使えるかのようなことが書かれていますが、実際にはそんなオプションはありません。どこかのUNIXのマニュアルからコマンドの説明をろくにチェックもしないでパクっただけでしょう。NT/2000のDDKを読んでいると、シンボリックリンクオブジェクトという言葉がしばしば出てきます。NT/2000が内部で使用しているカーネルオブジェクトに対して張られるもので、デバイスドライバの開発者以外が目にすることはまずなく(だからDDKに書かれている)、UNIXのシンボリックリンクのようにファイルに対して張ることはできません。6.0のwinnt.hにはIO_REPARSE_TAG_SYMBOLIC_LINKといういかにもシンボリックリンクと関係ありそうな名前のマクロが出てきますが、これは実際には機能しません。5.0と呼ばれていたβ2の段階だったので、その後削られたものと思われます。実際最新のプラットフォームSDKのwinnt.hからはこのマクロはなくなっています。Vistaのシンボリックリンク用に新たに定義されたリパースタグ用のマクロの名前はIO_REPARSE_TAG_SYMLINKです。linkとして機能しているように見える。shortcutは一体どういう仕様になってるんだ?さっぱりわからん。そこでlsしてたらもう少しだけ謎が解けていたと思います。linkの機能はないありますけど。いうかこのページを読んでるはずなのにどうしたらそういう摩訶不思議な結論に到達するのでしょうか。M.Kimura(emk)。