パスワードを忘れた? アカウント作成
13006571 story
Windows

次期Windows 10、一般ユーザーでもシンボリックリンクの作成が可能に 73

ストーリー by hylom
やっと 部門より

今後Windows 10では一般ユーザーでも特別な権限無しにシンボリックリンクを作成できるようになるという(マイナビニュースWindows Developerブログ)。

シンボリックリンク機能はUNIXやLinuxでは古くから実装されていた機能だが、WindowsでもWindows VistaやWindows Server 2008でNTFSでシンボリックリンク機能が実装された。しかし、シンボリックリンクを作成するためには特別な権限が必要であり、一般ユーザーは利用できなかった。この制限はセキュリティ対策のためとされていたが、昨今ではマルチプラットフォーム対応の開発ツールやフレームワークなどでシンボリックリンクを利用する機会が増えており、それに対応するための変更だという。

関連リンク

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by adeu (2937) on 2016年12月06日 16時27分 (#3125552)
    ドライブ文字は残るので、べつに嬉しくもなんともない。
    • by Anonymous Coward

      一応Windowsでもボリュームをフォルダにマウント出来ますしストレージの仮想化もOSの機能でできます。
      だから面倒な作業を自分でやればUNIX的にすべてのドライブがC:にぶら下がっていてC:でアクセスできるようにすることも可能です。
      まあリムーバブルメディアの扱いが面倒ですが。
      #C:にぶら下げるのが嫌ならAでもZでも好きなのを使えばよいのだが

      • by Anonymous Coward

        drive letter を書きたくない気にしたくないという話なので、C:/ 以下にまとめられるといわれても嬉しくないのです。
        あえて希望をいうなら、カレントドライブがどこであろうが "/" を "C:\"の別名だとみなしてくれるようなデフォルト設定変更手段が API に追加されるとかですね。
        でもってそこまでやりたいなら Windows じゃなくてもいいよねって結論になる。

        • by Anonymous Coward

          drive letter を書きたくない気にしたくないという話なので、

          そこまでいうならWindowsは使ってないんでしょ?
          ならいちいちWindowsをdisることないと思うけど?

    • by Anonymous Coward

      ドライブ文字は残るので、べつに嬉しくもなんともない。

      あくまでもシンボリックリンクが一般ユーザーでも作成可能になったという話なのですが、
      それを理解されていますか?

  • by Anonymous Coward on 2016年12月06日 16時27分 (#3125554)

    ln -s [src] [dist]

    mklink /d [dist] [src]

    ややこしいよね

    • by Anonymous Coward

      最初にlnコマンド見たときはsrcとdistと順番逆だろうと思った。

      • by Anonymous Coward

        cpと同じ順番なのですぐ慣れた。

      • by Anonymous Coward

        私も良く間違った。

        第2引数(dist)がないとカレントディレクトリに
        同名で作ることを覚えてからは間違えなくなった。

        • by Anonymous Coward

          distの省略はよくやるから、こっちの並びの方がいいよね。

  • Windowsのファイルへのシンボリックリンクは何か変なんで、バッチファイルなどからファイルpath参照するときは注意が必要。

    http://ja.stackoverflow.com/questions/21321/ [stackoverflow.com]
    うまい解決策誰か教えて欲しい

  • by Anonymous Coward on 2016年12月06日 17時01分 (#3125584)

    実は、ファイルリンク作成に管理者権限を要求するのはmklinkというcmd.exeの内部コマンドの仕様であって、OSレベルでは一般権限で使えた。
    Win32APIへのリンク [microsoft.com]。権限について特に言及がない)
    だからリンクを張るサードパーティツールやPowerShellコマンドレットはすでに存在していて、Windows 7でも一般権限で使えていた。

    なので、私自身は従来から使っていたのだけど…。
    ハードリンクと違い、シンボリックリンクはアプリが存在を意識していないと、ときどき危なっかしい動作をする(特に削除)。
    ところがWindowsアプリでシンボリックリンクを意識しているアプリは皆無。
    結局、Windowsではハードリンクとジャンクションだけにしておくのが無難、というのが結論だなあ。
    とはいえハードリンクやジャンクションが使えるようになるだけで十分便利なので、使ってない人は使うとよろし。

    • by Anonymous Coward on 2016年12月06日 21時29分 (#3125763)

      言及がないのはドキュメントが腐っているだけで、実際にSeCreateSymbolicLinkPrivilegeが必要 [microsoft.com]。SeCreateSymbolicLinkは既定では管理者しか持っていない。

      # そしてこんなデタラメでも自信満々に堂々と書けばプラスモデされるスラドェ…

      親コメント
    • by Anonymous Coward

      お前がそう設定しただけでmklinkの仕様じゃねえよ

      • by Anonymous Coward

        設定ってなんのこと?

    • by Anonymous Coward

      ハードリンクやジャンクションは同じドライブ内でしか作れないだろ
      シンボリックリンクの代わりにはならん

      • by Anonymous Coward

        へ?ジャンクションは他ドライブに張れるのでは。
        つーか現に張って使ってるし…。

  • by emk (30939) on 2016年12月07日 22時48分 (#3126461) 日記

    Build 14972以降とか言われても、まだ(PCでは)Insider Preview出てないだろ! と思ったが、窓の杜の情報 [impress.co.jp]によるとBuild 14971ですでにサポートされていたらしいので試してみたところ、たしかに開発者モード有効なら特権不要でシンボリックリンクを作成できた。それどころかBuild 14965ですでにサポートされていたようだ。Build 14393 (Anniversary Update)ではまだ特権が必要だったことも確認。

    なおSYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEフラグはBuild 14971でもまだ実装されていないらしく、フラグなしで普通に作成できた一方、フラグを指定するとERROR_INVALID_PARAMETERになった。Build 14972でわざわざフラグを追加したということは、互換性に問題が出たのだろうか(ERROR_PRIVILEGE_NOT_HELDになることを期待するアプリか何かがあったとか)。

    あと「Windows 7では特権不要だった」「Windows 8/8.1では特権不要だった」「mklinkが自主規制していただけ」等々の怪情報が飛びかっているので念のため確認しておいたが、やはりWindows 7でもWindows 8.1でもCreateSymbolicLink関数を直接使っても特権は必要だった(Windows 8は環境がないので未確認)。

    • by emk (30939) on 2016年12月08日 23時50分 (#3127094) 日記

      Build 14986が来たので、動作を確認してみた。

      CreateSymbolicLinkはblog記事通り、SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEフラグの指定が必要になった。開発者モードが無効だとフラグを指定してもERROR_PRIVILEGE_NOT_HELDになる。

      なおCreateSymbolicLinkを使わずFSCTL_SET_REPARSE_POINTで直接シンボリックリンクのデータを書き込んで作成することは従来通り可能で、開発者モードが有効なら特権も不要になっていた。こちらの方法で作成する場合、特権は持っているだけではダメで自分でAdjustTokenPrivilegesで有効にする必要があったから、SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEフラグは内部的に特権の有効化をスキップしているのだろう。

      親コメント
  • by Anonymous Coward on 2016年12月06日 16時15分 (#3125541)

    までちゃんと書け

    • by Anonymous Coward

      まあBash on Ubuntu on Windowsエミュレーションと同じ路線で、UNIXプログラマへのご機嫌取りだよなあ。
      アプリがほぼ対応していないWindowsでは実用性はあまりないだろ。
      UNIXプログラマの自尊心をくすぐれれば大成功じゃないかな(実際コメントを見てると、狙い通りっぽいし)。

      • by Anonymous Coward
        アプリが対応しなくていいのがシンボリックリンクのいいところなんじゃねぇの?
        FILE *fp = fopen("C:\foo\bar.txt", "r");
        て書いたときbar.txtが本物のファイルかハードリンクかシンボリックリンクかなんてプログラマは気にしないだろ。 ショートカットだとbar.lnkを開いてもこうは行かないわけで。
        もしかしてWindowsではプログラマが気にしないとこれ正しく動作しないのか?…だったらそんなシンボリックリンクのようでシンボリックリンクでない機能なんか誰も使わないだろうから、いずれ次のシンボリックリンクもどきが開発されるんだろうな…今からもう気が滅入るわ
        • by Anonymous Coward on 2016年12月06日 21時33分 (#3125767)

          アプリが対応していないと、シンボリックリンクを消そうとしたらリンク先のディレクトリが丸々消滅したとかいうことになる。Windows XPのエクスプローラはジャンクションに対応していなかったので実際にそうなった。Vista以降、OSが標準で作っているジャンクションやディレクトリへのシンボリックリンクが、フォルダーの一覧取得をEveryoneに対して拒否しているのはおそらく非対応アプリ対策のため。UNIXではそういうことはありえないの?

          親コメント
  • by Anonymous Coward on 2016年12月06日 16時27分 (#3125553)

    Windowsのシンボリックリンクって↓の記事に書かれているmoreみたいなのがあるから要注意なんだよね

    http://www.atmarkit.co.jp/fwin2k/win2ktips/988symlink/symlink.html [atmarkit.co.jp]

  • 意味なく似たような機能が増えすぎてヤな感じ

    • 意味はある。
      あれはWinodwsのGUIシェルにおいて、コマンドに対して引数、ワーキングディレクトリ、
      起動時のウィンドウ設定(最大化とか)などの種々の設定を指示するためのものであって、シンポリックリンクでは代替にならない。
      ショートカットがないと、GUIシェルでは引数を渡すことすらできないことを考えれば、必要性がわかるだろう。

      親コメント
      • by Anonymous Coward

        使用者側へ別名提供するより
        プログラム側で別名に対応してくれた方が良かった

        "notepad (txt|rtf)"でnotepad.exe/wordpad.exeの選択してくれるとか
        dll地獄回避にfoo.dll.lnkを用意してfoo.dll fooV2.dll foo.V2-fix.dllを呼び出し元プログラムで判別するとか
        GUIもファイル種毎のフィルター表示を基本機能で提供、ディレクトリ階層も sbinと binだけに。

    • by Anonymous Coward

      常に.lnkが付くなんて代用できねえよ

  • by Anonymous Coward on 2016年12月06日 17時01分 (#3125583)

    統合されないかなー

  • by Anonymous Coward on 2016年12月06日 17時09分 (#3125587)

    少なくとも2000の頃からできていたんじゃなかったっけ。
    ツールのインストールやポリシー変更といった下準備は必要だったかもしれない。

    • by Anonymous Coward

      Link Shell Extension [schinagl.priv.at] 愛用してるんだけど
      Win8や8.1の時は確かに特別な権限いらなかったんよなあ。
      Win10になったら管理者権限要求され出して、なんだかなあと思ってた。

      • by Anonymous Coward

        そのソフトは自分もWin7で愛用してる。
        Win7だと「シンボリック」作成時はUAC出るよ。

        #「ジャンクション」「ハードリンク」作成時はUAC出ない

    • by Anonymous Coward

      2000からあったジャンクションは特別な権限は必要なかった(おそらく互換性のため)。
      Vistaから追加されたシンボリックリンクは、SeCreateSymbolicLinkPrivilegeが必要だった(ここが今回緩和されるところ)。
      Windows 10 バージョン 1607から追加されたWSLのsymlinkは権限不要だけど、NTFSのファイルシステムドライバレベルではリンクとして認識されない。あくまでもWSLの世界だけで認識される。

typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...