Получите путь CSIDL_LOCAL_APPDATA для любого пользователя в Windows.

StackOverflow https://stackoverflow.com/questions/131716

Вопрос

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

Это было полезно?

Решение

Вы можете получить 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).aspxSHGetKnownFolderPath — http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top