我正在运行一项服务(使用本地帐户)。我已经使用WTSEnumerateSessions检索了所有当前的sessionID。然后我在WTSQueryUserTokenGetTokenInformation的帮助下找到了模拟令牌和用户令牌。在执行任务后,我将方法称为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的字符串表示形式,您可以从OpenThreadTokenGetTokenInformation获得并用ConvertSidToStringSid进行转换

09-06 15:39