Поделиться через


Функция SHGetKnownFolderPath (shlobj_core.h)

Извлекает полный путь к известной папке, определенной идентификатором KNOWNFOLDERID папки.

Синтаксис

HRESULT SHGetKnownFolderPath(
  [in]           REFKNOWNFOLDERID rfid,
  [in]           DWORD            dwFlags,
  [in, optional] HANDLE           hToken,
  [out]          PWSTR            *ppszPath
);

Параметры

[in] rfid

Тип: REFKNOWNFOLDERID

Ссылка на ЗНАЧЕНИЕ KNOWNFOLDERID , идентифицирующее папку.

[in] dwFlags

Тип: DWORD

Флаги, указывающие специальные параметры извлечения. Это значение может быть равно 0; в противном случае одно или несколько значений KNOWN_FOLDER_FLAG .

[in, optional] hToken

Тип: HANDLE

Маркер доступа, представляющий конкретного пользователя. Если этот параметр имеет значение NULL, то функция запрашивает известную папку для текущего пользователя.

Запросите папку конкретного пользователя, передав hToken этого пользователя. Обычно это делается в контексте службы с достаточными привилегиями для получения маркера заданного пользователя. Этот маркер должен быть открыт с помощью TOKEN_QUERY и TOKEN_IMPERSONATE прав. В некоторых случаях также необходимо включить TOKEN_DUPLICATE. Помимо передачи hToken пользователя, необходимо подключить куст реестра конкретного пользователя. Дополнительные сведения о проблемах управления доступом см. в статье "Управление доступом ".

Назначение параметра hToken значением -1 указывает пользователя по умолчанию. Это позволяет клиентам SHGetKnownFolderPath находить расположения папок (например, папку Desktop ) для пользователя по умолчанию. Профиль пользователя по умолчанию дублируется при создании любой новой учетной записи пользователя и включает в себя специальные папки, такие как "Документы " и "Рабочий стол". Все элементы, добавленные в папку "Пользователь по умолчанию", также отображаются в любой новой учетной записи пользователя. Обратите внимание, что для доступа к папкам пользователей по умолчанию требуются права администратора.

[out] ppszPath

Тип: PWSTR*

При возврате этого метода содержит адрес указателя на строку Юникода, завершающую значение NULL, которая указывает путь к известной папке. Процесс вызова отвечает за освобождение этого ресурса после того, как он больше не нужен, вызвав CoTaskMemFree, независимо от того, успешно ли выполняется SHGetKnownFolderPath . Возвращаемый путь не включает конечную обратную косую черту. Например, возвращается значение "C:\Users", а не "C:\Users\".

Возвращаемое значение

Тип: HRESULT

Возвращает S_OK в случае успешного выполнения или значения ошибки в противном случае, включая следующее:

Код возврата Description
E_FAIL
Помимо прочего, это значение может указывать на то, что параметр МНОГОМЕРНЫХ ссылок ссылается на ИЗВЕСТНЫЙFOLDERID , который не имеет пути (например, папку, помеченную как KF_CATEGORY_VIRTUAL).
E_INVALIDARG
Помимо прочего, это значение может указывать на то, что параметр СИАПР ссылается на ИЗВЕСТНЫЙFOLDERID, который отсутствует в системе. Не все значения KNOWNFOLDERID присутствуют во всех системах. Используйте IKnownFolderManager::GetFolderIds , чтобы получить набор значений KNOWNFOLDERID для текущей системы.

Замечания

Эта функция заменяет SHGetFolderPath. Эта старая функция теперь является просто оболочкой для SHGetKnownFolderPath.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
целевая платформа Виндоус
Header shlobj_core.h (include Shlobj.h)
Library OneCore.Lib
DLL Shell32.dll (версия 6.0.6000 или более поздней версии)

См. также

IKnownFolder::GetPath

Пример известных папок

SHGetKnownFolderIDList

SHSetKnownFolderPath