如何在C#中获取登录SID
如何在 C# .net 中检索 Windows 登录 SID? (不是用户 SID,而是每个会话的唯一新 SID)
How does one retrieve the Windows Logon SID in C# .net? (not the user SID, but the unique new one for each session)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
恐怕您必须求助于使用 P/Invoke。 pinvoke.net 有一个如何执行此操作的示例(请参阅底部页面):
请注意,我仅更改了一行,将
TOKEN_INFORMATION_CLASS.TokenUser
替换为TOKEN_INFORMATION_CLASS.TokenSessionId
,这正是您所需要的。希望这有帮助。
更新:这是工作代码(至少在我的机器上):
注意,我在我的 x64 机器上测试了它,所以请密切关注
TokenInformation.ToInt64()
片段代码,也许你应该将其替换为 TokenInformation.ToInt32()I'm afraid you have to resort to using P/Invoke. There's an example how to do it at pinvoke.net (please see the bottom of the page):
Please note that I changed the example by altering just one line, I replaced
TOKEN_INFORMATION_CLASS.TokenUser
withTOKEN_INFORMATION_CLASS.TokenSessionId
which is exactly what you need.Hope this helps.
Update: Here's the working (at least on my machine) code:
N.B. I tested it on my x64 machine, so please pay close attention on
TokenInformation.ToInt64()
piece of code, maybe you should replace it withTokenInformation.ToInt32()
System.Security.Principal.WindowsIdentity.GetCurrent().User.AccountDomainSid - 可能有用吗?
System.Security.Principal.WindowsIdentity.GetCurrent().User.AccountDomainSid - might do the trick?
我知道这是一个旧帖子。刚刚遇到这个问题,因为我必须获取 ICA 会话 ID 和 RDP 会话 ID,才能让程序为每种类型的远程连接收集正确的变量。当前会话 ID 位于 Regedit HKEY_CURRENT_USER\Remote* 中。由于我找不到 WTS 的任何替代方案,因此我在这里发布我的解决方案。
I know this is an old post. Just ran into this problem as I had to get the ICA session ID and the RDP session ID to have a program collect the correct variables for each type of remote connection. The current session ID is located in Regedit HKEY_CURRENT_USER\Remote*. As I could not find any alternatives to WTS, I am posting my solution here.
我只是花了很长时间使用TOKEN_USER等获取SID,然后发现了C#中的快捷方式。您仍然需要获取进程句柄(例如 https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.handle?view=netcore-3.1),然后带有 P/invoke 的令牌:
但是一旦你拥有了令牌,你就不需要做任何令人讨厌的
GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS.TokenUser...
你只需使用的东西:...并且 BOOM 你可以获得所有信息您希望用户在 winId 之外获得(包括 SID),
然后不要忘记
CloseHandle(hToken)
并在 hProcess 上!I just spent a long time getting the SID using TOKEN_USER and so forth, then discovered a shortcut in C#. You still need to get the Process Handle (e.g. https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.handle?view=netcore-3.1) and then the token with P/invoke:
But once you have the token, you don't need to do any of the nasty
GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS.TokenUser...
stuff you just use:... and BOOM you can get all the info you want (inc SID) for the user out of winId.
Don't forget to
CloseHandle(hToken)
and on hProcess afterwards!