这两个API非常相似,但不清楚它们之间的区别是什么以及什么时候应该使用(除了LoadUserProfile被指定用于CreateProcessAsUser,我没有使用它,我仅仅是为了configurationHive访问)。
LoadUserProfile http://msdn.microsoft.com/en-us/library/bb762281(VS.85).aspx
RegOpenCurrentUser http://msdn.microsoft.com/en-us/library/ms724894(VS.85).aspx
根据服务和registry文章: http : //msdn.microsoft.com/en-us/library/ms685145( VS.85) .aspx我们应该在模仿时使用RegOpenCurrentUser。
但是,如果用户configuration文件正在漫游,RegOpenCurrentUser应该做什么?应该加载吗?
据我可以从这些文档告诉,这两个API提供了线程模拟的用户的HKEY_CURRENT_USER句柄。 因此,他们都“加载”configuration单元,即将其locking为数据库文件,并为registryAPI提供处理。
LoadUserProfile似乎可以像用户login时那样加载用户configuration文件,而RegOpenCurrentUser不会 – 这是正确的吗? 这两个API如何挂载configuration单元有什么根本区别(如果有的话)?
如果发生了什么,会有什么影响和差异(如果有的话)
用户login或注销时,每个模拟手柄已被使用?
当每个匹配closures函数(RegCloseKey和UnloadUserProfile)被调用时,用户已经login了?
但是,如果用户配置文件正在漫游,RegOpenCurrentUser应该做什么?应该加载吗?
它不加载配置文件。 想想这样:如果是这样的话,当完成HKEY_CURRENT_USER
的句柄时,你不得不以某种方式调用UnloadUserProfile()
。
LoadUserProfile似乎可以像用户登录时那样加载用户配置文件,而RegOpenCurrentUser不会 – 这是正确的吗?
是。
这两个API如何挂载配置单元有什么根本区别(如果有的话)?
没有。
如果用户登录或注销每个这些模拟句柄已被使用时,会发生什么情况和差异(如果有)?
他们会得到自己的句柄(对同一个关键),打开和关闭。
当每个匹配关闭函数(RegCloseKey和UnloadUserProfile)被调用时,用户已经登录了?
同上。
正如我目前正在试图完成同样的事情,我想我会用我在过去几天发现的东西。
我正在使用Windows XP sp3环境,并尝试在两种不同的情况下使用CurrentUser注册表访问来实现模拟
如果你遇到任何有用的东西,我会非常感激,如果你分享你的经验。 我的堆栈溢出问题可以在这里找到
管理员>有限用户&有限用户>管理员
到目前为止我注意到的是(在Windows XP sp3中)
只有当模拟用户启用了SeRestoreName和SeBackupName特权时才起作用(简单地为有限的用户启用这两个是不够的,因为它仍然失败,访问被拒绝的错误 – 请参阅我的StackOverflow问题的更多细节)。 到目前为止,能够成功调用LoadUserProfile()
的唯一方法是在开始模拟之前通过管理员帐户来完成此操作。
只有当用户的配置文件已经加载时才能“正常”工作。在我所做的每一个尝试中,我只能得到S-1-5-18配置单元的处理,除非用户配置单元被加载并且可以被访问HKEY_USERS已经
这两个函数用于不同的情况。
如果用户配置文件尚未加载,则LoadUserProfile
适用。
RegOpenCurrentUser
适用于用户配置文件已经加载,即如果您想要访问注册表配置单元已经交互式登录的用户。
请注意, LoadUserProfile
通常在没有模拟的情况下调用(因为您必须具有管理权限才能使用它),但必须使用模拟来调用RegOpenCurrentUser
。