Получить путь CSIDL_LOCAL_APPDATA для любого пользователя в Windows - PullRequest
3 голосов
/ 25 сентября 2008

Существует ли какой-либо Win32 / MFC API для получения CSIDL_LOCAL_APPDATA для любого пользователя, которого я хочу (не только текущего зарегистрированного пользователя)? Допустим, у меня есть список пользователей в форме «домен \ пользователь», и я хочу получить список их путей - это возможно?

1 Ответ

5 голосов
/ 25 сентября 2008

Вы можете получить SID для пользователя, а затем найти его в HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList и получить значение ProfileImagePath.

Получив этот путь, вы можете получить CLSID_LOCAL_APPDATA для своего пользователя, преобразовать абсолютный путь в относительный путь к своему профилю и затем добавить этот относительный путь к другому пути профиля пользователя.

Однако имейте в виду, что это зависит от недокументированного ключа реестра и может сломаться в будущих версиях ОС. (Или, как сказал бы Раймонд Чен: «Теперь, когда вы знаете, как это сделать, позвольте мне сказать вам, почему вы не должны делать это таким образом ...»: -))

Если у вас есть токен, представляющий пользователя, вы можете использовать SHGetFolderPath или SHGetKnownFolderPath (в Vista и выше). Тем не менее, существуют определенные ограничения безопасности, и вы должны прочитать MSDN для подробностей.

SHGetFolderPath - http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx SHGetKnownFolderPath - http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx

...