Example #1
0
        ////////////////////////////////////////////////////////////////////////////////
        //
        ////////////////////////////////////////////////////////////////////////////////
        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);
                }
            }
        }