При использовании ENUM следует учитывать следующие моменты:
ENUM лучше всего работают, когда
Когда не использовать ENUM
Я надеюсь, что эти пункты помогут вы.
Я смонтировал бы структуру данных реестра пользователя и искал бы значение пути. Да, это - субоптимальное решение, по всем упомянутым причинам (плохая прямая совместимость, и т.д.). Однако как много других вещей в Windows, Миссисипи не предоставлял API способ сделать то, что Вы хотите сделать, таким образом, это - доступный наилучший вариант.
Можно получить SID (не GUID) пользователя при помощи LookupAccountName. Можно загрузить использование структуры данных реестра пользователя LoadUserProfile, но к сожалению это также требует пользовательского маркера, который собирается потребовать их пароля. К счастью, можно вручную загрузить использование улья RegLoadKey в произвольное местоположение, считать данные и разгрузить его (я думаю).
Да, это - боль, и да, это, вероятно, собирается прервать будущие версии Windows. Возможно, к тому времени MS обеспечит API, чтобы сделать это, бэкпортирует его в более старые версии Windows и распределит его автоматически посредством обновления Windows..., но я не задержал бы дыхание.
P.S. Эта информация намеревалась увеличить информацию, предоставленную в Вашем связанном вопросе, включая правовые оговорки.
Не входите в реестр для нахождения этой информации. То местоположение могло бы измениться в будущих версиях Windows. Используйте SHGetFolderPath вместо этого.
http://msdn.microsoft.com/en-us/library/bb762181 (По сравнению с 85) .aspx
Править: Похоже, что LogonUser предоставит маркер другому пользователю, в котором Вы нуждаетесь.
Вы могли бы попытаться назвать ImpersonateLoggedOnUser (), чтобы изменить пользовательский маркер для другого пользователя и затем передать это SHGetFolderPath (). На основе документа для ImpersonateLoggedOnUser (), похоже, что можно назвать LogonUser () для получения маркера для определенного пользователя.
Только от чтения вокруг, я предположил бы, что рассматриваемый пользователь должен быть зарегистрирован в некоторой форме для этого для работы. Я вспоминаю одну страницу, заявляя, что структура данных реестра пользователя должна быть смонтирована для этого для работы (который имеет некоторый смысл, который я предполагаю).
Эта информация хранится в реестре в ключевых "папках HKEY_USERS\S-1-5-21-616815238-485949776-2992451252-3228\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell".
"S-1-5-21-616815238-485949776-2992451252-3218" является GUID пользователя. Необходимо заставить этот GUID находить соответствующий ключ и читать его.
В этом примере они используют функцию SHGetFolderPath, которую Вы упоминаете и существует список со всеми специальными папками, которые могли бы быть полезными.
Примечание: Microsoft препятствует для использования ключа реестра, так как это все еще там только для обратной совместимости