Как мне преодолеть "Символьную ссылку нельзя перейти, потому что ее тип отключен". ошибка при получении цели символической ссылки?
Следуя предыдущему вопросу, я создаю символическую ссылку на Server 2008 с компьютера Vista, используя пути UNC. Я могу создать ссылку просто отлично. Я могу перейти в окно Server 2008 и дважды щелкнуть ссылку в проводнике, чтобы открыть целевой файл. Однако я не могу использовать FileCreateW, чтобы получить указатель на UNC-путь (из окна Vista). Когда я пытаюсь это сделать, происходит сбой, и GetLastError() возвращает код ошибки 1463 (0x5B7), который:
Символическая ссылка не может быть пройдена, потому что ее тип отключен.
Как включить его "тип" в Server 2008 (если ошибка означает, что она говорит)?
8 ответов
Чтобы добавить полезный ответ @David Arno, основанный на W7:
fsutil.exe
можно сделать, чтобы показать, какие аргументы он принимает, просто запустив:
fsutil behavior set /?
Чтобы сообщить о текущей конфигурации, запустите fsutil behavior query SymlinkEvaluation
- см . ответ @Jake1164, особенно относительно того, как групповая политика может контролировать поведение.
Поведение разрешения символьной ссылки устанавливается на компьютере, который обращается к данной ссылке, а не на машине, на которой она размещена.
Коды поведения для fsutil behavior set SymlinkEvaluation
а именно L2L
, L2R
, R2L
, а также R2R
- означают следующее:
L
обозначает "Местный", иR
для "Remote" (кто бы мог подумать?)- Первый
L
или жеR
- до2
- относится к местоположению самой ссылки (в отличие от ее цели) относительно машины, осуществляющей доступ к ссылке. - Второй
L
или жеR
- после2
- относится к местоположению цели ссылки относительно машины, на которой расположена сама ССЫЛКА.
Таким образом, например, выполнение fsutil behavior set SymlinkEvaluation R2L
означает, что вы можете получить доступ к ссылкам:
- находится на удаленной машине (
R
) - которые указывают на цели на той же удаленной машине (
L
)
В отличие от того, что Дэвид испытал в Vista, я, в W7, смог разрешить удаленную ссылку, которая указывала на ресурс на другой удаленной машине, включив только R2R (а также не включив R2L).
Ну, я нашел ответ, хотя описать его как плохо задокументированный - преуменьшение!
Прежде всего, эта статья TechEd подчеркивает тот факт, что пользователи могут "включить или отключить любую из четырех оценок, доступных в символических ссылках". Эти четыре "оценки" включают в себя удаленный локальный и локальный удаленный. Это не дает никакой подсказки о том, как это сделать.
Однако, дальнейший поиск выявил эту страницу справки fsutil, которая на самом деле описывает, как "включить или отключить любую из четырех оценок, доступных в символических ссылках". Поэтому, чтобы решить проблему, с которой я столкнулся, мне нужно выполнить следующую команду в окне Vista:
fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
для того, чтобы разрешить полный доступ туда, где символические ссылки указывают как на локальные, так и на удаленные машины.
Я недавно нашел это на всех своих корпоративных коробках Windows 7, когда одна из моих старых программ перестала работать. После некоторого поиска и нахождения этих настроек я попытался установить их через командную строку и через реестр без облегчения.
Я обнаружил, что вы можете использовать команду из привилегированного приглашения:
fsutil behavior query SymlinkEvaluation
Это вернет статус этих ссылок И в моем случае, что они контролируются групповой политикой! Спасибо ИТ-отделу (вы, f@$#%$rs)!
Этими параметрами также можно напрямую управлять через реестр по адресу HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem: см. SymlinkLocalToLocalEvaluation, SymlinkLocalToRemoteEvaluation, SymlinkRemoteToLocalEvaluation, SymlinkRemoteToRemoteEvaluation.
если с "запросом поведения fsutil SymlinkEvaluation" вы получаете сообщение.. "в настоящее время контролируется групповой политикой"..., проверьте HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Filesystems\NTFS или просто выполните поиск в реестре через "Symlink"
Спасибо Дэвиду за подсказку, я отчаянно пытался решить эту проблему, из-за которой символические ссылки были практически бесполезны.
Следует отметить, что по умолчанию для Vista настроены L2L и L2R, но R2R и R2L отключены.
Сначала я попытался включить только R2R, но этого недостаточно. R2L тоже должен быть включен.
Следующий вопрос в моем списке: как избавиться от этого тупого ключа /D для команды mklink для ссылок на каталоги. Тип ссылки по умолчанию должен быть выведен автоматически из целевого типа пути!
Этими настройками также можно манипулировать напрямую через реестр (для записи требуется локальный администратор):
Ключ реестра: 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: выборочно разрешить оценку символической ссылки
К вашему сведению, если у вас есть групповые политики, управляющие настройками SymlinkEvaluation, вы МОЖЕТЕ установить их самостоятельно из командной строки. Они будут перезаписаны GP при следующей перезагрузке / входе в систему, но ваши настройки будут работать во время сеанса пользователя.
Таким образом, в качестве обходного пути, если вам нужно установить что-то, отличное от того, что диктует GP, вы можете даже запустить скрипт при входе в систему, чтобы установить их после применения GP.
Удаленные точки соединения работают по умолчанию. Для файлов вам все еще нужны символические ссылки.