什么副作用影响的有来自Windows用户的模拟?(What side affects are the

2019-10-22 01:51发布

在Windows中,程序可以通过调用获取用户访问令牌LogonUserOpenProcessToken ,SSPI功能,和一对夫妇等。 一旦你的道理,也有不少,你可以通过这个令牌进入以做事为这个用户的一些功能。 做这些排序通常有副作用的“父”进程的行动?

例如,您可以通过加载用户的配置文件(注册表设置等) LoadUserProfile 。 除其他事项外, LoadUserProfile将用户的注册表配置单元加载到HKEY_USERS和地图HKEY_CURRENT_USER它。 从父进程的角度来看,这是否改变HKEY_CURRENT_USER ? 或者是开始一个新的过程,通过该用户后才“可见” CreateProcessAsUser ,通过冒充在当前进程ImpersonateLoggedOnUser等?

Answer 1:

每它的文档 , LoadUserProfile()返回的句柄HKEY_CURRENT_USER已加载密钥。 然后,您可以通过该句柄登记职能,他们会访问该用户的数据。 LoadUserProfile()不影响HKEY_CURRENT_USER与运行调用进程的用户相关联的密钥。

模拟会影响通话过程中的HKEY_CURRENT_USER关键,但通常不会:

预定义项

HKEY_CURRENT_USER
...
HKEY_CURRENT_USER和HKEY_USERS之间的映射是每个进程并且建立首次进程引用HKEY_CURRENT_USER。 该映射是基于所述第一线程来引用HKEY_CURRENT_USER的安全上下文 。 如果此安全性上下文没有在HKEY_USERS加载注册表配置单元,映射建立与HKEY_USERS.Default。 在建立映射后,它仍然存在,即使线程变化的安全环境

所以,如果你要模拟当您使用用户HKEY_CURRENT_USER首次,那么它将映射到用户对过程的持续时间的关键。 雷蒙德陈甚至高达上他的博客中说:

这是错误的,从一个服务调用SHFileOperation? 修订

该注册表项HKEY_CURRENT_USER被绑定到在键首先由进程访问时的当前用户:
...
这意味着,如果您模拟用户,然后访问HKEY_CURRENT_USER,然后结合HKEY_CURRENT_USER到模拟的用户。 即使你停止冒充,到HKEY_CURRENT_USER将来参考仍将是指该用户。

然而,大多数情况下,你可能会模仿你的人之前,或在冒充您将无法访问注册表,所以访问注册表HKEY_CURRENT_USER通常会映射到该应用程序正在运行的用户。 如果一个线程模拟用户和需要访问该用户的HKEY_CURRENT_USER键,使用OpenThreadToken()如果您还没有令牌)和LoadUserProfile()来获取用户的HKEY_CURRENT_USER手柄。



文章来源: What side affects are there from Windows user impersonation?