Получить UNC-путь из сопоставленной буквы диска после олицетворения - PullRequest
3 голосов
/ 27 апреля 2011

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

Но ...

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

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

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

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

1 Ответ

0 голосов
/ 27 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...