Получить UNC-путь из подключенной буквы диска после олицетворения

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

Но...

  • Если я создаю новый сеанс входа в систему, вызывая LogonUser() (пользователь входа такой же, как создатель процесса)
  • Выдавайте себя за вошедшего в систему пользователя, вызвав функцию ImpersonateLoggedOnUser()
  • И снова вызовем WNetGetUniversalName(), функция вернет ошибку 2250 (ERROR_NOT_CONNECTED)

Дело в том, что я должен запускать этот процесс как службу (в учетной записи SYSTEM), поэтому мне может потребоваться выдать себя за пользователя, чтобы получить подключенные диски этого пользователя и связанные сетевые пути. Как я проверил, доступ к информации через пользовательские сеансы невозможен.

Где Windows хранит эту информацию, чтобы можно было переназначить диски при повторном входе пользователя в систему? Я обнаружил, что история сопоставленных сетевых путей хранится в реестре под ключом: HKEY_USERS\<User SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU, но в нем не говорится, будет ли сопоставлен путь UNC, когда пользователь снова войдет в систему, и связанная буква диска.

Пожалуйста помоги.


person Jatin Sanghvi    schedule 27.04.2011    source источник
comment
Windows не может хранить эту информацию в одном месте, это зависит от настроек вашей сети. Диски обычно назначаются либо с помощью групповой политики, либо с помощью сценария входа в систему.   -  person gnud    schedule 27.04.2011


Ответы (1)


Если я правильно помню, я считаю, что эти сопоставления дисков хранятся в сеансе входа в систему. Поскольку LogonUser () создает новый сеанс входа в систему, у него не будет сопоставлений дисков; вам придется использовать ImpersonateLoggedOnUser () с существующим токеном.

person Luke    schedule 27.04.2011
comment
Спасибо, Люк. Как я уже сказал, процесс будет выполняться как служба (в учетной записи SYSTEM), и пользователь не должен входить в систему. Всякий раз, когда пользователь подключает сетевой диск, есть опция «Повторное подключение при входе в систему». Таким образом, Windows должна сохранять эту информацию для следующего входа в систему. Вероятно, решение для этого вообще не требует олицетворения. Я все еще ищу ответ. - person Jatin Sanghvi; 29.04.2011
comment
Если пользователь не вошел в систему, его профиль не будет загружен. Вы можете загрузить его явно, но это плохая практика, поскольку попытка войти в систему, пока он у вас загружен, будет иметь плохие результаты. - person Luke; 29.04.2011