Получите путь CSIDL_LOCAL_APPDATA для любого пользователя в Windows.
-
02-07-2019 - |
Вопрос
Есть ли какой-либо 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