【问题标题】:What is the difference: LoadUserProfile -vs- RegOpenCurrentUser有什么区别:LoadUserProfile -vs- RegOpenCurrentUser
【发布时间】:2010-10-02 08:02:53
【问题描述】:

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

加载用户配置文件 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 如何挂载 hive 的根本区别是什么(如果有的话)?

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

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

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

【问题讨论】:

    标签: c++ windows impersonation token roaming-profile


    【解决方案1】:

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

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

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

    是的。

    这两个 API 如何挂载 hive 的根本区别是什么(如果有的话)?

    无。

    如果发生的事情之间有什么影响和区别(如果有的话) 当每个模拟句柄都在使用时,用户登录或注销?

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

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

    同上。

    【讨论】:

      【解决方案2】:

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

      我在 Windows XP sp3 环境中工作,并尝试在两种不同的场景中实现对 CurrentUser 注册表访问的模拟

      如果您遇到任何有用的东西,如果您分享您的经验,我将不胜感激。 My stack overflow question can be found here

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

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

      加载用户配置文件():

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

      RegOpenCurrentUser():

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

      【讨论】:

        【解决方案3】:

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

        LoadUserProfile 适用于尚未加载用户配置文件的情况。

        RegOpenCurrentUser 适用于已加载用户配置文件的情况,即,如果您想访问已交互登录的用户的注册表配置单元。

        请注意,LoadUserProfile 通常被称为没有模拟(因为您必须有管理员权限才能使用它)但RegOpenCurrentUser 必须被称为模拟。

        【讨论】:

          猜你喜欢
          • 2011-05-23
          • 1970-01-01
          • 2014-07-01
          • 2021-07-16
          • 2013-03-18
          • 1970-01-01
          • 2013-01-15
          • 2015-02-15
          相关资源
          最近更新 更多