タイプが無効になっているため、シンボリックリンクをたどることはできません。”シンボリックリンクのターゲットを取得する際のエラー?
-
04-07-2019 - |
質問
前の質問、UNCパスを使用してVistaマシンからServer 2008にシンボリックリンクを作成しています。リンクをうまく作成できます。 Server 2008ボックスに移動し、エクスプローラーのリンクをダブルクリックしてターゲットファイルを開くことができます。ただし、FileCreateWを使用して(Vistaボックスから)UNCパスリンクへのハンドルを取得することはできません。試してみると失敗し、GetLastError()はエラーコード1463(0x5B7)を返します。これは次のとおりです。
タイプが無効になっているため、シンボリックリンクをたどることができません。
「タイプ」を有効にする方法Server 2008では(エラーとはそのエラーの意味を想定している場合)?
解決
W7に基づいて、 @David Arnoの役立つ回答に追加するには:
fsutil.exe
は、実行するだけで、どの引数を取るかを示すことができます:
fsutil behavior set /?
現在の構成を報告するには、 fsutil behavior query SymlinkEvaluation
を実行します- @ Jake1164の回答、特にグループポリシーが動作を制御する方法に関して。
シンボリックリンク解決の動作は、リンクをホストするマシンではなく、特定のリンクにアクセスするマシンで設定されます。
fsutil動作の動作コードはSymlinkEvaluation
を設定します。つまり、 L2L
、 L2R
、 R2L
、および R2R
-次を意味します:
-
L
は" Local"を表し、R
は" Remote"を表します。 (誰がサンクしたでしょうか?) - 最初の
L
またはR
-2
の前-リンク自体の場所を指します(ターゲットとは対照的に)リンクにアクセスするマシンに対して。 - SECOND
L
またはR
-2
の後-リンクのの場所を指します> LINK自体が置かれているマシンを基準としたターゲット。
したがって、たとえば、 fsutil behavior set SymlinkEvaluation R2L
を実行すると、リンクにアクセスできるようになります:
- リモートマシン(
R
)にあります - 同じリモートマシン上のターゲットを指します(
L
)
DavidがVistaで経験したこととは異なり、私はW7で、R2Rのみを有効にすることで(R2Lも有効にする必要がない)別のリモートマシン上のリソースを指すリモートリンクを解決できました。
他のヒント
答えは見つかりましたが、文書化が不十分であると説明するのは控えめです!
まず、このTechEdの記事では、ユーザーが「シンボリックリンクで利用可能な4つの評価のいずれかを有効または無効にする」ことができます。これらの4つの「評価」リモートからローカルおよびローカルからリモートを含めます。これを行う方法についての手がかりはありません。
ただし、さらに検索すると、このfsutilヘルプページが明らかになりました。 ;シンボリックリンクで利用できる4つの評価のいずれかを有効または無効にします。したがって、私が抱えていた問題を解決するには、次のコマンドを Vistaのボックスで実行する必要があります:
fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
ローカルマシンとリモートマシンの両方でシンボリックリンクが指している場所へのフルアクセスを許可するため。
最近、レガシープログラムの1つが機能しなくなったときに、すべての企業のWindows 7ボックスでこれを見つけました。これらの設定を検索して見つけた後、コマンドラインとレジストリを使用して設定を試みましたが、安心しました。
昇格したプロンプトからコマンドを使用できることがわかりました:
fsutil behavior query SymlinkEvaluation
これにより、これらのリンクのステータスが返され、私の場合はグループポリシーによって制御されています! IT部門(f @ $#%$ rs)に感謝します!
これらの設定は、 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem のレジストリを介して直接操作することもできます。: SymlinkLocalToLocalEvaluation、SymlinkLocalToRemoteEvaluation、SymlinkRemoteToLocalEvaluation、SymlinkRemoteToRemoteEvaluationを参照してください。
" fsutil behavior query SymlinkEvaluation"を使用する場合メッセージが表示されます.." 現在グループポリシーによって制御されています" ...、 HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ Filesystems \ NTFS を確認します または単に「Symlink」をレジストリから検索してください
ヒントをありがとう、デビッドはこの問題を解決するために必死になっていたので、シンボリックリンクはほとんど役に立たなくなりました。
Vistaのデフォルト設定はL2LとL2Rが有効ですが、R2RとR2Lは無効になっていることに注意してください。
最初にR2Rのみを有効にしようとしましたが、これでは不十分です。 R2Lも有効にする必要があります。
私のリストの次の質問:ディレクトリリンクのmklinkコマンドのその愚かな/ Dスイッチを取り除く方法。デフォルトのリンクタイプは、ターゲットのパス名タイプから自動的に推測されるはずです!
これらの設定は、レジストリを介して直接操作することもできます(書き込むにはローカル管理者が必要です):
レジストリキー: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem
レジストリ値(名前/データのペア):
Name Type Data (1: Enabled; 0: Disabled)
-------------------------------------------------
SymlinkLocalToLocalEvaluation REG_DWORD 1
SymlinkLocalToRemoteEvaluation REG_DWORD 1
SymlinkRemoteToLocalEvaluation REG_DWORD 1
SymlinkRemoteToRemoteEvaluation REG_DWORD 1
公式ドキュメントを見つけるのは困難ですが、これはMicrosoftの公式ページのようです:シンボリックリンクの評価を選択的に許可
FYI SymlinkEvaluation設定を制御するグループポリシーがある場合は、コマンドラインから自分で設定できます。これらは次回の再起動/ログイン時にGPによって上書きされますが、設定はユーザーセッション中に機能します。
そのため、GPの指示以外の値に設定する必要がある場合の回避策として、ログオン時にスクリプトを実行してGPの適用後にそれらを設定することもできます。
リモートジャンクションポイントはデフォルトで機能します。ファイルについては、まだシンボリックリンクが必要です。