这两个API非常相似,但不清楚区别是什么以及何时应该使用它们(除了指定LoadUserProfile与我不使用的CreateProcessAsUser一起使用。我只是模仿hive访问)。
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的句柄。因此,它们都“加载”hive,即将其锁定为数据库文件,并为注册表API提供句柄。
似乎LoadUserProfile以与用户登录时相同的方式加载用户配置文件,而RegOpenCurrentUser则不是 - 这是正确的吗?这两个API如何安装配置单元的根本区别(如果有的话)是什么?
IF
之间的含义和差异(如果有的话)是什么?当这些模拟句柄中的每个句柄都在使用时,用户是登录还是注销?
当调用每个匹配的关闭函数(RegCloseKey和UnloadUserProfile)时,用户已经登录了吗?
答案 0 :(得分:1)
但是如果用户个人资料正在漫游,那么RegOpenCurrentUser应该做什么/应该加载它?
它不会加载配置文件。以这种方式思考:如果确实如此,那么在完成UnloadUserProfile()
的句柄后,您必须以某种方式调用HKEY_CURRENT_USER
。
似乎LoadUserProfile以与用户登录时相同的方式加载用户配置文件,而RegOpenCurrentUser则不是 - 这是正确的吗?
是
这两个API如何安装配置单元的根本区别(如果有的话)是什么?
无。
IF之间会发生什么影响和差异(如果有的话) 用户登录或注销时,这些模拟句柄中的每一个都已被使用?
他们将获得自己的手柄(相同的钥匙)打开和关闭。
当调用每个匹配的关闭函数(RegCloseKey和UnloadUserProfile)时,用户已经登录了吗?
同上。
答案 1 :(得分:1)
由于我目前正在尝试完成同样的事情,我认为我会在过去几天里发现我所发现的事情。
我正在Windows XP sp3环境中工作并尝试在两种不同的场景中使用CurrentUser注册表访问来模拟
如果你遇到任何有用的东西,如果你分享你的经验,我将非常感激。 My stack overflow question can be found here
管理员>有限的用户和受限用户>管理员
到目前为止我注意到的是(在Windows XP sp3中)
仅当模仿用户启用了SeRestoreName和SeBackupName权限时才起作用(仅为有限用户启用这两个权限是不够的,因为它仍然因访问被拒绝错误而失败 - 有关详细信息,请参阅我的StackOverflow问题)。到目前为止,我能够成功调用LoadUserProfile()
的唯一方法是在开始模拟之前通过管理员帐户执行此操作。
只有在用户的个人资料已经加载时才“正常”工作,在我迄今为止所做的每一次尝试中,我只能获得S-1-5-18配置单元的句柄,除非用户配置单元被加载并已在HKEY_USERS下访问
答案 2 :(得分:0)
这两个功能在不同情况下使用。
如果尚未加载用户个人资料,则 LoadUserProfile
是合适的。
RegOpenCurrentUser
适用于已加载用户配置文件 的情况,即,如果您要访问已经交互式登录的用户的注册表配置单元。
请注意,LoadUserProfile
通常称为,没有模拟(因为您必须具有管理员权限才能使用它),但RegOpenCurrentUser
必须使用调用 >冒充。