#c #windows #unc #mapped-drive
#c #Windows #unc #отображенный диск
Вопрос:
Если я вызываю функцию WNetGetUniversalName()
, чтобы получить UNC-путь с диска, отображенного в текущем сеансе, функция завершается успешно.
Но…
- Если я создам новую процедуру входа в систему путем вызова
LogonUser()
(Пользователь для входа в систему совпадает с создателем процесса) - Олицетворять пользователя, вошедшего в систему, вызывая
ImpersonateLoggedOnUser()
функцию - И повторный вызов
WNetGetUniversalName()
, функция возвращает ошибку 2250 (ERROR_NOT_CONNECTED
)
Дело в том, что я должен запускать этот процесс как службу (в СИСТЕМНОЙ учетной записи), поэтому мне может потребоваться выдать себя за пользователя, чтобы получить отображенные диски этого пользователя и связанные сетевые пути. Как я проверил, информация не может быть доступна через пользовательские сеансы.
Где Windows хранит эту информацию, чтобы она могла переназначать диски при повторном входе пользователя в систему? Я обнаружил, что история отображенных сетевых путей хранится в реестре в разделе key: HKEY_USERS<User SID>SoftwareMicrosoftWindowsCurrentVersionExplorerMap Network Drive MRU
но в нем не указано, будет ли отображен путь UNC при повторном входе пользователя в систему и соответствующая буква диска.
Пожалуйста, помогите.
Комментарии:
1. Нет ни одного места, где Windows хранит эту информацию, это зависит от настроек вашей сети. Диски чаще всего сопоставляются либо с помощью групповой политики, либо с помощью сценария входа в систему.
Ответ №1:
Если я правильно помню, я полагаю, что эти сопоставления дисков сохраняются в сеансе входа в систему. Поскольку LogonUser() создает новый сеанс входа в систему, у него не будет сопоставлений дисков; вам придется использовать ImpersonateLoggedOnUser() с существующим токеном.
Комментарии:
1. Спасибо, Люк. Как я уже сказал, процесс будет запущен как служба (в СИСТЕМНОЙ учетной записи), и пользователь не должен входить в систему. Всякий раз, когда пользователь сопоставляет сетевой диск, есть опция «Переподключиться при входе в систему». Таким образом, Windows должна сохранять эту информацию для следующего входа в систему. Вероятно, решение для этого вообще не требует олицетворения. Я все еще ищу ответ.
2. Если пользователь не вошел в систему, то его профиль не будет загружен. Вы могли бы загрузить его явно, но это плохая практика, поскольку попытка входа в систему во время загрузки приведет к плохим результатам.