LoadUserProfileA 函数 (userenv.h)
加载指定用户的配置文件。 配置文件可以是 本地用户配置文件 ,也可以是 漫游用户配置文件。
语法
USERENVAPI BOOL LoadUserProfileA(
[in] HANDLE hToken,
[in, out] LPPROFILEINFOA lpProfileInfo
);
参数
[in] hToken
类型: 句柄
用户的令牌,由 LogonUser、 CreateRestrictedToken、 DuplicateToken、 OpenProcessToken 或 OpenThreadToken 函数返回。 令牌必须具有 TOKEN_QUERY、 TOKEN_IMPERSONATE和 TOKEN_DUPLICATE 访问权限。 有关详细信息,请参阅 Access-Token 对象的访问权限。
[in, out] lpProfileInfo
类型: LPPROFILEINFO
指向 PROFILEINFO 结构的指针。 如果结构的 dwSize 成员未设置为 sizeof(PROFILEINFO)
或 lpUserName 成员为 NULL,LoadUserProfile 将失败并返回ERROR_INVALID_PARAMETER。 有关详细信息,请参阅“备注”。
返回值
类型: BOOL
如果成功,则为 TRUE;否则为 FALSE。 要获得更多的错误信息,请调用 GetLastError。
如果 lpProfileInfo 处结构的 dwSize 成员未设置为 sizeof(PROFILEINFO)
或 lpUserName 成员为 NULL,函数将失败并返回ERROR_INVALID_PARAMETER。
注解
当用户以交互方式登录时,系统会自动加载用户的配置文件。 如果服务或应用程序模拟用户,则系统不会加载用户的配置文件。 因此,服务或应用程序应使用 LoadUserProfile 加载用户配置文件。
调用 LoadUserProfile 的服务和应用程序应检查,以查看用户是否具有漫游配置文件。 如果用户具有漫游配置文件,请将其路径指定为 PROFILEINFO 的 lpProfilePath 成员。 若要检索用户的漫游配置文件路径,可以调用 NetUserGetInfo 函数,指定信息级别 3 或 4。
成功返回后,PROFILEINFO 的 hProfile 成员是向用户配置单元的根目录打开的注册表项句柄。 它已以完全访问权限 (KEY_ALL_ACCESS) 打开。 如果模拟用户的服务需要读取或写入用户的注册表文件,请使用此句柄而不是 HKEY_CURRENT_USER。 不要关闭 hProfile 句柄。 而是将其传递给 UnloadUserProfile 函数。 此函数关闭句柄。 应确保关闭用户注册表配置单元中键的所有句柄。 如果未关闭所有打开的注册表句柄,则无法卸载用户的配置文件。 有关详细信息,请参阅 注册表项安全和访问权限 和 注册表配置单元。
请注意,在调用 CreateProcessAsUser 之前,你有责任使用 LoadUserProfile 函数将用户的注册表配置单元加载到HKEY_USERS注册表项中。 这是因为 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 [仅限桌面应用] |
目标平台 | Windows |
标头 | userenv.h |
Library | Userenv.lib |
DLL | Userenv.dll |