Войдите в сетевой ресурс Windows (SMB) только для этого процесса
Легко войти в сетевой ресурс Windows (SMB) для всего сеанса пользователя (например, net use
, WNetAddConnection2()
так далее).
Есть ли подобный способ, который повлияет только на мой текущий процесс?
Может быть, какая-то система токенов?
Аутентификация всей сессии - это нормально, если альтернативы действительно нет, но я бы предпочел избежать "глобального решения локальной проблемы".
2 ответа
Сетевые сеансы обрабатываются ядром Windows как часть драйвера клиента smb, поэтому они управляются для каждой рабочей станции Windows (а не для пользователя), что означает, что вы не можете получить доступ к одному и тому же общему ресурсу с двумя разными учетными данными, и вы можете ' Фактически создайте новое сетевое соединение для каждого процесса в соответствии с ограничением, наложенным клиентом Windows smb. Причиной ограничения является то, что Microsoft реализовала общий доступ в качестве драйвера фильтра, каждый UNC-путь (\share\test) для совместного доступа хранится в качестве общего ресурса, чтобы упростить вашу жизнь как разработчика и пользователя. (делает доступ к общему доступу беспроблемным)
быстрый пример этого - запуск net use в командной строке с повышенными правами (запуск от имени администратора) и попытка доступа к нему в невыполненном контексте.
Вы можете пойти в любую сторону:
- использовать в своем программном обеспечении samba / другую пользовательскую реализацию smb (есть некоторые основанные на python)
- создать новую рабочую станцию для каждого из ваших процессов (это связано с большими накладными расходами)
Сетевые сеансы (и назначенные буквы дисков) обрабатываются для каждого пользователя, а не для процесса. Поэтому нет, вы не можете создать сеанс SMB только для вашего процесса, если он не выполняется с выделенной учетной записью пользователя. В противном случае вам просто нужно добавить глобальное соединение (включая CONNECT_TEMPORARY
флаг, например), а затем удалите соединение (WNetCancelConnection2()
) когда вы закончите использовать его.