//////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////// private static void _LogonUser(CommandLineParsing cLP, IntPtr hToken) { string username; if (!cLP.GetData("username", out username)) { return; } string domain = "."; string password = string.Empty; Winbase.LOGON_TYPE logonType = Winbase.LOGON_TYPE.LOGON32_LOGON_INTERACTIVE; if (username.Contains('\\') && !username.ToLower().StartsWith("nt service")) { string[] split = username.Split('\\').ToArray(); domain = split.FirstOrDefault(); username = split.LastOrDefault(); if (!cLP.GetData("password", out password)) { return; } Console.WriteLine("User Logon"); } else if (username.Contains('\\') && username.ToLower().StartsWith("nt service")) { string[] split = username.Split('\\').ToArray(); username = split.LastOrDefault(); logonType = Winbase.LOGON_TYPE.LOGON32_LOGON_SERVICE; domain = "NT SERVICE"; Console.WriteLine("Service Logon"); } else { switch (username.ToLower().Trim()) { case "localservice": username = "******"; logonType = Winbase.LOGON_TYPE.LOGON32_LOGON_SERVICE; domain = "NT AUTHORITY"; break; case "localsystem": username = "******"; logonType = Winbase.LOGON_TYPE.LOGON32_LOGON_SERVICE; domain = "NT AUTHORITY"; break; case "networkservice": username = "******"; logonType = Winbase.LOGON_TYPE.LOGON32_LOGON_SERVICE; domain = "NT AUTHORITY"; break; default: cLP.GetData("password", out password); break; } } using (TokenManipulation t = new TokenManipulation(hToken)) { string groups; if (cLP.GetData("groups", out groups)) { t.LogonUser(domain, username, password, groups, logonType, cLP.Command, cLP.Arguments); } else { t.LogonUser(domain, username, password, logonType, cLP.Command, cLP.Arguments); } } }