1

Когда я пытаюсь создать каталог на диске Windows, который еще не существует, я получаю следующее сообщение:

C:\>mklink H H:\ /J
Local volumes are required to complete the operation.

Я хочу иметь каталог на окнах, которые соединяют каждую букву диска с соответствующей буквой в этом каталоге. Я хочу обмениваться мультимедиа с любого внешнего устройства через приложение без необходимости изменять настройки, когда появляются "новые" буквы дисков.

Кажется, что символические ссылки могут указывать на несуществующие цели, потому что операционная система не проверяет, существует ли цель, но они не могут связаться с несуществующими дисками. Есть ли какие-либо известные решения для создания такого соединения каталогов?

Одним из решений является создание символьной ссылки на каталог (с использованием флага /D вместо флага /J), но это не то, что я ищу, я хочу соединение каталога.

1 ответ1

2

Для этого возможны только развязки
Используйте SUBST, чтобы обмануть ОС.
Очень важно использовать родительскую папку с параметром /deny Everyone:(S,RD) чтобы блокировать бесконечный цикл ОС при выполнении технического обслуживания. Как поиск, индексатор поиска, антивирус, история файлов, кто знает, что еще.

Подробности и сценарий ниже


Я вижу, у вас есть понимание большинства следующих вещей, поэтому давайте просто подведем итоги для других.

Symlinks
Каталог Sym-ссылки и соединения очень разные вещи.
Главное отличие, которое должно вас беспокоить, заключается в том, что вы не можете получить доступ к символическим ссылкам на удаленном компьютере, которые ссылаются на локальные пути этого удаленного компьютера. Sym-ссылка на F:\ на удаленном компьютере попытается открыть F:\ на локальном ПК.
Sym-ссылка похожа на файл ссылок, который содержит информацию о пути к реальному объекту. Вы можете символическую ссылку на что угодно, даже относительные пути.
Вы можете создать символическую ссылку на каталог на несуществующем диске, но это не поможет вам по локальной сети.

Соединение - это вещь NTFS. Но, хотя Junction должен быть в NTFS, он может указывать на папку на другой FS. Он «перенаправляет» доступ к объединенной папке. Вы можете получить доступ к узлам на удаленных машинах, указывая на удаленные папки.
Остерегайтесь разрешений. оба целевого каталога и соединения. (icacls с / л)

Для файлов есть ссылки на файлы и жесткие ссылки. Для Директории нет жестких ссылок, но Junction довольно близка к этому. Жесткие ссылки - это множественные файловые записи, указывающие на одну и ту же позицию на диске. По этой причине вы не можете жестко связать диски.

Примечание. Соединения не должны создаваться для связи динамических мест. Работает нормально, даже если другая ФС смонтирована под той же буквой, но это не поддерживается. Вы должны создать общий ресурс для каждого диска. Но это может привести к путанице в сетевых расположениях, и не будет никакого способа контролировать доступ с помощью разрешений.


Это вырез из моего скрипта настройки. Он портативный, поместите его в файл bat и запустите от имени администратора.

  • создает общий доступ к дискам с помощью точек соединения с дисками букв из всего алфавита. Общие диски будут доступны любому пользователю, прошедшему проверку подлинности. (не Гость и Пользователь без пароля) Пользователи будут иметь такой же доступ, как если бы они вошли в систему локально, но UAC не сможет предоставить повышенный доступ даже для администраторов.
  • создает общий ресурс Download-Private для загрузок текущего пользователя - просто удалите раздел, если он вам не нужен
  • Папки этих двух общих ресурсов помещаются в «% PUBLIC%\Private share», например, «c:\Users\Public\Private share». Эта папка будет недоступна напрямую, чтобы фоновые службы не могли зацикливаться. Вы по-прежнему можете получить доступ к папкам внутри него напрямую, написав полный путь в адресной строке или создав ярлык Windows.
  • Чтобы настроить разрешения для всей папки, отредактируйте "Частные ресурсы", но чтобы настроить определенные буквы диска, вы должны использовать icacls с параметром /L

echo. & echo === "Private shares"

echo *** Creating Folders
rem --- Private shares - inheriting Authenticated Users access from Public folder
if not exist "%PUBLIC%\Private shares" mkdir "%PUBLIC%\Private shares"
rem - remove DENY temporarily
icacls "%PUBLIC%\Private shares" /remove:d Everyone 2>nul
if not exist "%PUBLIC%\Private shares\Drives" mkdir "%PUBLIC%\Private shares\Drives"

echo *** Creating Downloads-Private share
echo *   Creating link
mklink /J "%PUBLIC%\Private shares\Downloads-%USERNAME%" "%USERPROFILE%\Downloads"
echo *   Creating shares
net share Downloads-Private /delete 2>nul
net share Downloads-Private="%PUBLIC%\Private shares\Downloads-%USERNAME%" /unlimited /remark:"Only for authenticated users" /grant:everyone,FULL

echo *** Creating Drives share
echo *   Creating link
for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
    subst %%a: \
    mklink /J "%PUBLIC%\Private shares\Drives\%%a" %%a:\
    subst %%a: /d
)

echo *   Creating shares
net share Drives /delete 2>nul
rem - /grant:everyone,FULL --- No worry, this is on Microsoft's recommendation. Grant full access to shares and handle access through permissions. It's more portable, safer and simpler.
net share Drives="%PUBLIC%\Private shares\Drives" /unlimited /remark:"Only for authenticated users" /grant:everyone,FULL

echo *** Changing "Private share" permissions
rem - this is the same way as Windows is handling legacy folders inside Users directory
rem   this must be done, or many services will keep crawling though an endless path loop
icacls "%PUBLIC%\Private shares" /deny Everyone:(S,RD)

Если вам нужно удалить папку, созданную с помощью этого сценария, вам нужно разблокировать ее с помощью Properties-Permission или с помощью этой команды запустить от имени администратора: icacls "%PUBLIC%\Private shares" /remove:d Everyone
Не оставляйте эту папку разблокированной, сразу удаляйте ее или блокируйте снова, используя icacls "%PUBLIC%\Private shares" /deny Everyone:(S,RD)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .