我正在运行一项服务(使用本地帐户)。我已经使用WTSEnumerateSessions
检索了所有当前的sessionID。然后我在WTSQueryUserToken
和GetTokenInformation
的帮助下找到了模拟令牌和用户令牌。在执行任务后,我将方法称为ImpersonateLoggedOnUser
,方法称为“ revertToSelf”
对于第一个会话,它工作得很好(从SYSTEM帐户到userAccount)。但是对于下一个会话,我仍在访问上一个用户HKEY_CURRENT_USERS
(当我检索帐户名称时,效果很好)。但是,当我尝试更新HKEY_CURRENT_USER时,它将把更改添加到上一个会话中(在开始处理下一个会话之前,我已经调用了revertoself。
提前致谢
最佳答案
模拟更改了安全检查的结果,它不会更改注册表的视图,在这种情况下为每用户密钥。
要为特定用户更新HKEY_CURRENT_USER,您需要查看HKEY_USERS并找到属于您要修改其注册表的用户的密钥。
它们的键名看起来像这样:
HKEY_USERS \ S-1-5-21-123412341-123412341-123412341-1061
HKEY_USERS \ S-1-5-21-123412341-123412341-123412341-1061_Classes
S-1-5部分是用户SID的字符串表示形式,您可以从OpenThreadToken
,GetTokenInformation
获得并用ConvertSidToStringSid
进行转换