4

这两个 API 非常相似,但不清楚它们的区别是什么以及何时应该使用它们(除了指定 LoadUserProfile 用于我没有使用的 CreateProcessAsUser。我只是模拟配置单元访问)。

LoadUserProfile http://msdn.microsoft.com/en-us/library/bb762281(VS.85).aspx

RegOpenCurrentUser http://msdn.microsoft.com/en-us/library/ms724894(VS.85).aspx

根据服务和注册表文章: http: //msdn.microsoft.com/en-us/library/ms685145 (VS.85).aspx 我们应该在模拟时使用 RegOpenCurrentUser。

但是,如果用户配置文件正在漫游,RegOpenCurrentUser 应该/应该做什么 - 它应该加载它吗?

据我从这些文档中可以看出,这两个 API 都为线程模拟的用户提供了 HKEY_CURRENT_USER 的句柄。因此,它们都“加载”配置单元,即将其锁定为数据库文件,并为注册表 API 提供一个句柄。

看起来 LoadUserProfile 加载用户配置文件的方式与用户登录时的方式相同,而 RegOpenCurrentUser 没有 - 这是正确的吗?这两个 API 如何安装配置单元的根本区别是什么(如果有的话)?

如果发生的事情之间有什么影响和区别(如果有的话)

  1. 当每个模拟句柄都在使用时,用户登录或注销?

  2. 调用每个匹配的关闭函数(RegCloseKey 和 UnloadUserProfile)时,用户已经登录?

4

3 回答 3

1

但是,如果用户配置文件正在漫游,RegOpenCurrentUser 应该/应该做什么 - 它应该加载它吗?

它不加载配置文件。可以这样想:如果是这样,您必须UnloadUserProfile()在完成处理后以某种方式调用 to HKEY_CURRENT_USER

看起来 LoadUserProfile 加载用户配置文件的方式与用户登录时的方式相同,而 RegOpenCurrentUser 没有 - 这是正确的吗?

是的。

这两个 API 如何安装配置单元的根本区别是什么(如果有的话)?

没有任何。

如果用户登录或注销而这些模拟句柄中的每一个都已在使用中,会发生什么情况之间的含义和区别(如果有)是什么?

他们将获得自己的打开和关闭的句柄(同一个键)。

调用每个匹配的关闭函数(RegCloseKey 和 UnloadUserProfile)时,用户已经登录?

同上。

于 2009-05-08T04:56:28.920 回答
1

由于我目前正在尝试完成与您相同的事情,因此我想我会附和过去几天的发现。

我在 Windows XP sp3 环境中工作,并尝试在两种不同的情况下使用 CurrentUser 注册表访问来实现模拟

如果您遇到任何有用的东西,如果您分享您的经验,我将不胜感激。我的堆栈溢出问题可以在这里找到

管理员 > 受限用户和受限用户 > 管理员

到目前为止我注意到的是(在 Windows XP sp3 中)

加载用户配置文件():

仅当模拟用户启用了 SeRestoreName 和 SeBackupName 权限时才有效(仅仅为有问题的受限用户启用这两个权限是不够的,因为它仍然因访问被拒绝错误而失败 - 有关详细信息,请参阅我的 StackOverflow 问题)。LoadUserProfile()到目前为止,我能够成功调用的唯一方法是在开始模拟之前通过管理员帐户进行调用。

RegOpenCurrentUser():

只有在用户的配置文件已经加载时才能“正常”工作,到目前为止,我所做的每一次尝试都只能获得 S-1-5-18 配置单元的句柄,除非用户配置单元已加载并可在下访问HKEY_USERS 已经

于 2010-12-09T16:25:26.980 回答
0

这两个函数在不同的情况下使用。

LoadUserProfile如果尚未加载用户配置文件,则适用。

RegOpenCurrentUser如果用户配置文件已经加载,例如,如果您想访问已经交互登录的用户的注册表配置单元,则此选项是合适

请注意,LoadUserProfile通常在没有模拟的情况下调用它(因为您必须具有管理员权限才能使用它)但RegOpenCurrentUser必须在模拟的情况下调用。

于 2016-07-29T02:24:42.253 回答