예제 #1
0
        private Process LaunchSPDragDrop()
        {
            IntPtr userToken = IntPtr.Zero;

            try
            {
                iHostClipboard?.Dispose();
                iHostClipboard = new AnonIpcHost("SP dragdrop");
                ISLogger.Write("Launching SP dragdrop process");
                userToken = Token.GetUserToken();
                Process proc = ProcessLauncher.LaunchSP(ProcessLauncher.SPMode.Clipboard, WindowsDesktop.Default, Settings.DEBUG_SPCONSOLEENABLED, iHostClipboard, userToken);
                Token.CloseToken(userToken);
                spClipboardHandle.host = iHostClipboard;
                spClipboardHandle.NotifyHandleUpdate();
                return(proc);
            }
            catch (Exception ex)
            {
                ISLogger.Write("Failed to launch inputshareSP dragdrop process: " + ex.Message);

                return(null);
            }
            finally
            {
                if (userToken != IntPtr.Zero)
                {
                    Token.CloseToken(userToken);
                }
            }
        }
예제 #2
0
        private void SpMainTaskLoop()
        {
            iHostMain         = new AnonIpcHost("Main process");
            spMainHandle.host = iHostMain;

            while (!stopping)
            {
                try
                {
                    Process proc = LaunchSPMain();
                    proc.WaitForExit();
                }
                catch (Exception)
                {
                    Thread.Sleep(1000);
                }
            }
        }
예제 #3
0
        private Process LaunchSPMain()
        {
            IntPtr sysToken = IntPtr.Zero;

            try
            {
                iHostMain?.Dispose();
                iHostMain = new AnonIpcHost("SP main");
                ISLogger.Write("Launching SP default process");


                if (Settings.DEBUG_SPECIFYSPSESSION != -1)
                {
                    sysToken = unchecked (Token.GetSystemToken((uint)Settings.DEBUG_SPECIFYSPSESSION));
                }
                else
                {
                    sysToken = Token.GetSystemToken(Session.ConsoleSessionId);
                }

                Process proc = ProcessLauncher.LaunchSP(ProcessLauncher.SPMode.Default, WindowsDesktop.Default, Settings.DEBUG_SPCONSOLEENABLED, iHostMain, sysToken);
                Token.CloseToken(sysToken);
                spMainHandle.host = iHostMain;
                spMainHandle.NotifyHandleUpdate();
                return(proc);
            }
            catch (Exception ex)
            {
                ISLogger.Write("Failed to launch inputshareSP main process: " + ex.Message);
                return(null);
            }
            finally
            {
                if (sysToken != IntPtr.Zero)
                {
                    Token.CloseToken(sysToken);
                }
            }
        }
예제 #4
0
        private void SpDragDropTaskLoop()
        {
            iHostClipboard         = new AnonIpcHost("Dragdrop process");
            spClipboardHandle.host = iHostClipboard;

            while (!stopping)
            {
                try
                {
                    while (!Session.ConsoleSessionLoggedIn)
                    {
                        Thread.Sleep(500);
                    }

                    Process proc = LaunchSPDragDrop();
                    proc.WaitForExit();
                }
                catch (Exception)
                {
                    Thread.Sleep(1000);
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Launches inputshareSP
        /// </summary>
        /// <param name="mode"></param>
        /// <param name="desktop"></param>
        /// <param name="createConsole"></param>
        /// <param name="ipcHost"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        /// <exception cref="CreateProcessException"></exception>"
        public static Process LaunchSP(SPMode mode, WindowsDesktop desktop, bool createConsole, AnonIpcHost ipcHost, IntPtr token)
        {
            PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
            STARTUPINFO         si = new STARTUPINFO();

            si.cb        = Marshal.SizeOf(si);
            si.lpDesktop = desktop.ToString();
            CreateBlankAttribs(out SECURITY_ATTRIBUTES tokenAttribs, out SECURITY_ATTRIBUTES threadAttribs);

            CreateProcessFlags flags = CreateProcessFlags.REALTIME_PRIORITY_CLASS;

            if (!createConsole)
            {
                flags |= CreateProcessFlags.CREATE_NO_WINDOW;
            }

            string cmd = " " + mode.ToString() + " " + ipcHost.WriteStringHandle + " " + ipcHost.ReadStringHandle;

            if (!CreateProcessAsUser(token, AppDomain.CurrentDomain.BaseDirectory + "\\inputsharesp.exe",
                                     cmd,
                                     ref tokenAttribs,
                                     ref threadAttribs,
                                     true,
                                     (uint)flags,
                                     IntPtr.Zero,
                                     AppDomain.CurrentDomain.BaseDirectory,
                                     ref si,
                                     out pi))
            {
                throw new CreateProcessException(new Win32Exception().Message);
            }

            return(Process.GetProcessById(pi.dwProcessId));
        }