LoadUserProfileA 函数 (userenv.h)
加载指定的用户配置文件。 配置文件可以是本地用户配置文件
语法
USERENVAPI BOOL LoadUserProfileA(
[in] HANDLE hToken,
[in, out] LPPROFILEINFOA lpProfileInfo
);
参数
[in] hToken
类型:HANDLE
用户的令牌,由 LogonUser、CreateRestrictedToken、DuplicateToken、OpenProcessToken或 OpenThreadToken 函数返回。 令牌必须具有 TOKEN_QUERY、TOKEN_IMPERSONATE和 TOKEN_DUPLICATE 访问权限。 有关详细信息,请参阅 Access-Token 对象的访问权限。
[in, out] lpProfileInfo
类型:LPPROFILEINFO
指向 PROFILEINFO 结构的指针。
LoadUserProfile 失败,如果结构的 dwSize 成员未设置为 sizeof(PROFILEINFO)
,或者如果 lpUserName 成员 NULL,则返回 ERROR_INVALID_PARAMETER。 有关详细信息,请参阅“备注”。
返回值
类型:BOOL
如果成功,则 TRUE;否则,FALSE。 若要获取扩展的错误信息,请调用 GetLastError。
如果 lpProfileInfodwSize 成员未设置为 sizeof(PROFILEINFO)
,或者 lpUserName 成员 NULL,则该函数将失败并返回ERROR_INVALID_PARAMETER。
言论
当用户以交互方式登录时,系统会自动加载用户的配置文件。 如果服务或应用程序模拟用户,则系统不会加载用户的配置文件。 因此,服务或应用程序应使用 LoadUserProfile加载用户的配置文件。
调用 LoadUserProfile 的服务和应用程序应检查用户是否有漫游配置文件。 如果用户具有漫游配置文件,请将其路径指定为 lpProfilePathPROFILEINFO成员。 若要检索用户的漫游配置文件路径,可以调用 NetUserGetInfo 函数,并指定信息级别 3 或 4。
成功返回后,PROFILEINFO 的 hProfile 成员是一个注册表项句柄,该句柄已打开给用户的 hive 根目录。 它已打开并具有完全访问权限(KEY_ALL_ACCESS)。 如果模拟用户的服务需要读取或写入用户的注册表文件,请使用此句柄而不是 HKEY_CURRENT_USER。 不要关闭 hProfile 句柄。 而是将其传递给 UnloadUserProfile 函数。 此函数关闭句柄。 应确保关闭用户注册表配置单元中密钥的所有句柄。 如果未关闭所有打开的注册表句柄,则用户配置文件无法卸载。 有关详细信息,请参阅 注册表项安全和访问权限 和 注册表配置单元。
请注意,在使用 LoadUserProfile 函数之前,将用户的注册表配置单元加载到 HKEY_USERS 注册表项中负责 CreateProcessAsUser。 这是因为 CreateProcessAsUser 不会将指定的用户配置文件加载到 HKEY_USERS中。 这意味着,访问 HKEY_CURRENT_USER 注册表项中的信息可能不会产生与正常交互式登录一致的结果。
调用过程必须具有 SE_RESTORE_NAME 和 SE_BACKUP_NAME 权限。 有关详细信息,请参阅 使用特殊特权运行。
从 Windows XP Service Pack 2(SP2)和 Windows Server 2003 开始,调用方必须是管理员或 LocalSystem 帐户。 调用方仅模拟管理员或 LocalSystem 帐户是不够的。
注意
userenv.h 标头将 LoadUserProfile 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | 窗户 |
标头 | userenv.h |
库 | Userenv.lib |
DLL | Userenv.dll |