繁体   English   中英

获取用户Sid

[英]Getting User Sid

我正在编写服务,并且试图获取登录的用户sid,并且无论出于何种原因它都无法正常工作。 它仅返回{S-1-5-18}。 但是,如果我创建一个快速的控制台应用程序,它就可以正常工作。

我尝试了2种方法:

WindowsIdentity usr = WindowsIdentity.GetCurrent();
return usr.User

以及:

UserPrincipal.Current.Sid

他们对我的服务都有相同的影响。 他们俩都只返回{S-1-5-18}。 然而,在控制台应用程序中,它们都返回完整的用户sid。

是什么原因造成的?

我想您正在以NT AUTHORITY\\SYSTEM.\\LOCALSYSTEM形式运行服务进程。 请参阅知识库文章243330

SID:S-1-5-18
名称:本地系统
说明:操作系统使用的服务帐户。

如果您想从桌面会话中获取SID,则可以例如(通过使用cassia - nuget-package可用 ):

    ITerminalServicesSession GetActiveSession()
    {
        var terminalServicesSession = default(ITerminalServicesSession);
        var terminalServicesManager = new TerminalServicesManager();
        using (var server = terminalServicesManager.GetLocalServer())
        {
            foreach (var session in server.GetSessions())
            {
                if (session.ConnectionState == ConnectionState.Active)
                {
                    // yep, I know ... LINQ ... but this is from a plain .NET 2.0 source ...
                    terminalServicesSession = session;
                    break;
                }
            }
        }
        return terminalServicesSession;
    }

ITerminalServiceSession -instance确实包含应根据需要工作的属性SessionId 但是请注意,与会话状态有关的警告-我不保证我的条件足够,您可能需要根据需要调整ConnectionState上的条件。

这些API将返回执行当前进程的用户的SID,如果您使用的是您的服务。 S-1-5-18NT AUTHORITY\\SYSTEM

可以有零个到登录到Windows系统的许多用户(供交互式使用:本地或远程),从零开始:没有单一的“登录用户”。

您需要完善您的需求:为什么要了解登录用户?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM