c #windows服务使用HKEY_USERS当前登录的用户

时间:2017-03-22 11:27:00

标签: c# windows c#-4.0

我有一个作为LocalSystem运行的Windows服务,我需要从当前用户登录的regedit。我尝试使用: System.Security.Principal.WindowsIdentity.GetCurrent()。名称 - >返回系统的配置文件(S-1-5-18),我需要的是" S-1-5-21-2238971182-363666278-428364487-1001&#34 ;; Environment.UserName 它返回"系统" 我也使用CurrentUser但是是一样的。^ 我如何访问System使用的regestry密钥但使用当前记录的使用SID

1 个答案:

答案 0 :(得分:1)

Windows中的

可以是多个登录用户。所以需要一些条件,根据你选择"当前"。例如,您可以拨打WTSGetActiveConsoleSessionId,然后在通话WTSQueryUserToken中使用此 SessionId 。或者,您可以按WTSEnumerateSessions和每次通话WTSQueryUserToken

枚举所有当前登录的用户

获得用户令牌后(这将是 TokenPrimary TOKEN_TYPE),您可以查询TokenUser以获取用户 SID 然后将此 SID 用于打开HKEY_USERS\{sid}键(这是最有效的)。或致电DuplicateToken获取 TokenImpersonation SetThreadTokenRegOpenCurrentUser(此后再次调用SetThreadToken(0,0)进行重置模拟) - 但这是当然,第一种方式的效果要差得多。