我有一个作为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
答案 0 :(得分:1)
可以是多个登录用户。所以需要一些条件,根据你选择"当前"。例如,您可以拨打WTSGetActiveConsoleSessionId
,然后在通话WTSQueryUserToken
中使用此 SessionId 。或者,您可以按WTSEnumerateSessions
和每次通话WTSQueryUserToken
获得用户令牌后(这将是 TokenPrimary
TOKEN_TYPE
),您可以查询TokenUser
以获取用户 SID 然后将此 SID 用于打开HKEY_USERS\{sid}
键(这是最有效的)。或致电DuplicateToken
获取 TokenImpersonation
,SetThreadToken
和RegOpenCurrentUser
(此后再次调用SetThreadToken(0,0)
进行重置模拟) - 但这是当然,第一种方式的效果要差得多。