Если я вызываю функцию 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, когда пользователь снова войдет в систему, и связанная буква диска.
Пожалуйста помоги.