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); } } }
private void SpMainTaskLoop() { iHostMain = new AnonIpcHost("Main process"); spMainHandle.host = iHostMain; while (!stopping) { try { Process proc = LaunchSPMain(); proc.WaitForExit(); } catch (Exception) { Thread.Sleep(1000); } } }
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); } } }
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); } } }
/// <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)); }