static NtToken CreateProcessForToken(string cmdline, NtToken token, bool make_interactive) { using (NtToken newtoken = token.DuplicateToken(TokenType.Primary, SecurityImpersonationLevel.Anonymous, TokenAccessRights.MaximumAllowed)) { string desktop = null; if (make_interactive) { desktop = @"WinSta0\Default"; newtoken.SetSessionId(NtProcess.Current.SessionId); } using (Win32Process process = Win32Process.CreateProcessAsUser(newtoken, null, cmdline, CreateProcessFlags.None, desktop)) { return(process.Process.OpenToken()); } } }