获取当前登录用户的身份,而不是系统帐户

时间:2009-10-09 13:56:43

标签: c# .net security process

我有一个在本地系统帐户的安全上下文中运行的进程。从C#开始,如何启动(使用System.Diagnostics.Process.Start)将在当前登录用户的安全上下文中运行的进程,而不是系统帐户?

2 个答案:

答案 0 :(得分:1)

您需要获取当前登录用户的令牌并调用CreateProcessAsUser。请记住,快速用户切换(FUS)可能有多个用户登录到计算机,因此您必须选择要启动流程的用户。

要枚举用户会话,您可以使用WTSEnumerateSessions API。使用此选项可查找当前会话标识符。然后调用WTSQueryUserToken以获取当前登录用户的令牌。使用此令牌,您可以使用CreateProcessAsUser。

不幸的是,您需要对所有这些方法调用使用P / Invoke。如果您有用户名和密码,那么您只需使用System.Diagnostics.Process.Start()重载。

答案 1 :(得分:0)

我相信您需要确定/评估本地登录的会话 - 请参阅WTSEnumerateSessions/WTSQuerySessionInformation/WTSQueryUserToken,我认为您仅限于Win32 API,我认为这不是托管代码包装。