检索由文件夹的 KNOWNFOLDERID 标识的已知文件夹的完整路径。
Syntax
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 的客户端就可以查找默认用户的文件夹位置(如 桌面 文件夹)。 创建任何新用户帐户时,默认用户配置文件将重复,并包括 文档 和 桌面等特殊文件夹。 添加到默认用户文件夹的任何项目也会显示在任何新用户帐户中。 请注意,访问默认用户文件夹需要管理员权限。
[out] ppszPath
类型: PWSTR*
此方法返回时,包含指向指定已知文件夹路径的以 null 结尾的 Unicode 字符串的指针的地址。 调用进程负责在调用 CoTaskMemFree( SHGetKnownFolderPath 是否成功)后释放此资源。 返回的路径不包括尾部反斜杠。 例如,返回“C:\Users”而不是“C:\Users\”。
返回值
类型:HRESULT
如果成功,则返回S_OK;否则返回错误值,包括以下内容:
| 返回代码 | Description |
|---|---|
|
除其他事项外,此值可以指示 KF_CATEGORY_VIRTUAL引用 了一个 KNOWNFOLDERID (如标记为 KF_CATEGORY_VIRTUAL的文件夹)。 |
|
除其他事项外,此值可以指示 其参数 引用系统上不存在的 KNOWNFOLDERID 。 并非所有 KNOWNFOLDERID 值都存在于所有系统上。 使用 IKnownFolderManager::GetFolderIds 检索当前系统的 KNOWNFOLDERID 值集。 |
注解
此函数替换 SHGetFolderPath。 这个较旧的函数现在只是 SHGetKnownFolderPath 的包装器。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows Vista [仅限桌面应用] |
| 支持的最低服务器 | Windows Server 2008 [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | shlobj_core.h (包括 Shlobj.h) |
| Library | OneCore.Lib |
| DLL | Shell32.dll (版本 6.0.6000 或更高版本) |