public static void Stop(IWin32Window window, string service, bool prompt) { if (ElevateIfRequired(window, service, ServiceAccess.Stop, "stop")) { return; } if (prompt && !Prompt(window, service, "stop", "", TaskDialogIcon.None)) { return; } try { using (var shandle = new ServiceHandle(service, ServiceAccess.Stop)) shandle.Control(ServiceControl.Stop); } catch (Exception ex) { DialogResult r = MessageBox.Show(window, "Could not stop the service \"" + service + "\":\n\n" + ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public static void Pause(IWin32Window window, string service, bool prompt) { if (ElevateIfRequired(window, service, ServiceAccess.PauseContinue, "pause")) return; if (prompt && !Prompt(window, service, "pause", "", TaskDialogIcon.None)) return; try { using (var shandle = new ServiceHandle(service, ServiceAccess.PauseContinue)) shandle.Control(ServiceControl.Pause); } catch (Exception ex) { DialogResult r = MessageBox.Show(window, "Could not pause the service \"" + service + "\":\n\n" + ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private static bool ProcessCommandLine(Dictionary<string, string> pArgs) { if (pArgs.ContainsKey("-assistant")) { Assistant.Main(pArgs); return true; } if (pArgs.ContainsKey("-e")) { try { ExtendedCmd.Run(pArgs); } catch (Exception ex) { PhUtils.ShowException("Unable to complete the operation", ex); } return true; } if (pArgs.ContainsKey("-installkph")) { try { using (ServiceManagerHandle scm = new ServiceManagerHandle(ScManagerAccess.CreateService)) { using (ServiceHandle shandle = scm.CreateService( "KProcessHacker2", "KProcessHacker2", ServiceType.KernelDriver, ServiceStartType.SystemStart, ServiceErrorControl.Ignore, Application.StartupPath + "\\kprocesshacker.sys", null, null, null )) { shandle.Start(); } } } catch (WindowsException ex) { // Need to pass status back. Environment.Exit((int)ex.ErrorCode); } return true; } if (pArgs.ContainsKey("-uninstallkph")) { try { using (ServiceHandle shandle = new ServiceHandle("KProcessHacker2", ServiceAccess.Stop | (ServiceAccess)StandardRights.Delete)) { try { shandle.Control(ServiceControl.Stop); } catch { } shandle.Delete(); } } catch (WindowsException ex) { // Need to pass status back. Environment.Exit((int)ex.ErrorCode); } return true; } if (pArgs.ContainsKey("-ip")) InspectPid = int.Parse(pArgs["-ip"]); if (pArgs.ContainsKey("-pw")) { int pid = int.Parse(pArgs["-pw"]); PrimaryProviderThread = new ProviderThread(Settings.Instance.RefreshInterval); SecondaryProviderThread = new ProviderThread(Settings.Instance.RefreshInterval); ProcessProvider = new ProcessSystemProvider(); ServiceProvider = new ServiceProvider(); PrimaryProviderThread.Add(ProcessProvider); PrimaryProviderThread.Add(ServiceProvider); ProcessProvider.Boost(); ServiceProvider.Boost(); ProcessProvider.Enabled = true; ServiceProvider.Enabled = true; Win32.LoadLibrary(Settings.Instance.DbgHelpPath); if (!ProcessProvider.Dictionary.ContainsKey(pid)) { PhUtils.ShowError("The process (PID " + pid.ToString() + ") does not exist."); Environment.Exit(0); return true; } ProcessWindow pw = new ProcessWindow(ProcessProvider.Dictionary[pid]); Application.Run(pw); PrimaryProviderThread.Dispose(); ProcessProvider.Dispose(); ServiceProvider.Dispose(); Environment.Exit(0); return true; } if (pArgs.ContainsKey("-pt")) { int pid = int.Parse(pArgs["-pt"]); try { using (var phandle = new ProcessHandle(pid, Program.MinProcessQueryRights)) Application.Run(new TokenWindow(phandle)); } catch (Exception ex) { PhUtils.ShowException("Unable to show token properties", ex); } return true; } if (pArgs.ContainsKey("-o")) { OptionsWindow options = new OptionsWindow(true) { StartPosition = FormStartPosition.CenterScreen }; IWin32Window window; if (pArgs.ContainsKey("-hwnd")) window = new WindowFromHandle(new IntPtr(int.Parse(pArgs["-hwnd"]))); else window = new WindowFromHandle(IntPtr.Zero); if (pArgs.ContainsKey("-rect")) { Rectangle rect = Utils.GetRectangle(pArgs["-rect"]); options.Location = new Point(rect.X + 20, rect.Y + 20); options.StartPosition = FormStartPosition.Manual; } options.SelectedTab = options.TabPages["tabAdvanced"]; options.ShowDialog(window); return true; } if (pArgs.ContainsKey(string.Empty)) if (pArgs[string.Empty].Replace("\"", string.Empty).Trim().EndsWith("taskmgr.exe", StringComparison.OrdinalIgnoreCase)) StartVisible = true; if (pArgs.ContainsKey("-m")) StartHidden = true; if (pArgs.ContainsKey("-v")) StartVisible = true; if (pArgs.ContainsKey("-a")) { try { Unhook(); } catch { } try { NProcessHacker.KphHookInit(); } catch { } } if (pArgs.ContainsKey("-t")) { if (pArgs["-t"] == "0") SelectTab = "Processes"; else if (pArgs["-t"] == "1") SelectTab = "Services"; else if (pArgs["-t"] == "2") SelectTab = "Network"; } return false; }