Как я могу получить путь Windows “специальная папка” для определенного пользователя?

При использовании ENUM следует учитывать следующие моменты:

ENUM лучше всего работают, когда

  • Тип, который вы представляете, является локальным только для таблицы [110 ]
  • Он должен представлять тип, который никогда не изменяется
  • Он никогда не будет испытывать переопределения
  • Его мощность должна быть низкой
  • Его переносимость всегда должна основываться на логические дампы таблицы, а не физические.

Когда не использовать ENUM

  • Когда тип ENUM не фиксирован
  • Когда тип ENUM имеет длинный список значений
  • Когда ваше приложение не знает список значений ENUM
  • Тип ENUM не может быть повторно использован
  • Переносимость вызывает беспокойство

Я надеюсь, что эти пункты помогут вы.

10
задан Community 23 May 2017 в 12:24
поделиться

4 ответа

Я смонтировал бы структуру данных реестра пользователя и искал бы значение пути. Да, это - субоптимальное решение, по всем упомянутым причинам (плохая прямая совместимость, и т.д.). Однако как много других вещей в Windows, Миссисипи не предоставлял API способ сделать то, что Вы хотите сделать, таким образом, это - доступный наилучший вариант.

Можно получить SID (не GUID) пользователя при помощи LookupAccountName. Можно загрузить использование структуры данных реестра пользователя LoadUserProfile, но к сожалению это также требует пользовательского маркера, который собирается потребовать их пароля. К счастью, можно вручную загрузить использование улья RegLoadKey в произвольное местоположение, считать данные и разгрузить его (я думаю).

Да, это - боль, и да, это, вероятно, собирается прервать будущие версии Windows. Возможно, к тому времени MS обеспечит API, чтобы сделать это, бэкпортирует его в более старые версии Windows и распределит его автоматически посредством обновления Windows..., но я не задержал бы дыхание.

P.S. Эта информация намеревалась увеличить информацию, предоставленную в Вашем связанном вопросе, включая правовые оговорки.

2
ответ дан 3 December 2019 в 23:15
поделиться

Не входите в реестр для нахождения этой информации. То местоположение могло бы измениться в будущих версиях Windows. Используйте SHGetFolderPath вместо этого.

http://msdn.microsoft.com/en-us/library/bb762181 (По сравнению с 85) .aspx

Править: Похоже, что LogonUser предоставит маркер другому пользователю, в котором Вы нуждаетесь.

12
ответ дан 3 December 2019 в 23:15
поделиться

Вы могли бы попытаться назвать ImpersonateLoggedOnUser (), чтобы изменить пользовательский маркер для другого пользователя и затем передать это SHGetFolderPath (). На основе документа для ImpersonateLoggedOnUser (), похоже, что можно назвать LogonUser () для получения маркера для определенного пользователя.

Только от чтения вокруг, я предположил бы, что рассматриваемый пользователь должен быть зарегистрирован в некоторой форме для этого для работы. Я вспоминаю одну страницу, заявляя, что структура данных реестра пользователя должна быть смонтирована для этого для работы (который имеет некоторый смысл, который я предполагаю).

3
ответ дан 3 December 2019 в 23:15
поделиться

Эта информация хранится в реестре в ключевых "папках 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 препятствует для использования ключа реестра, так как это все еще там только для обратной совместимости

-3
ответ дан 3 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: