Index: base/process.h |
diff --git a/base/process.h b/base/process.h |
deleted file mode 100644 |
index 1cde0c356d7d6e4120234721f0b79122415cac79..0000000000000000000000000000000000000000 |
--- a/base/process.h |
+++ /dev/null |
@@ -1,314 +0,0 @@ |
-// Copyright 2004-2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
-// |
-// Declares class Process to incapsulate win32 |
-// functions for creation and some manipulations of |
-// processes. |
- |
-#ifndef OMAHA_BASE_PROCESS_H_ |
-#define OMAHA_BASE_PROCESS_H_ |
- |
-#include <windows.h> |
-#include <psapi.h> |
-#include <atlstr.h> |
-#include <vector> |
-#include "base/basictypes.h" |
-#include "omaha/base/constants.h" |
-#include "omaha/base/scoped_any.h" |
- |
-namespace omaha { |
- |
-const int kMaxProcesses = 1024; |
-const int kMaxProcessModules = 1024; |
- |
-// Exclude mask for finding processes. |
-enum FindProcessesExcludeMask { |
- EXCLUDE_NONE = 0, |
- EXCLUDE_CURRENT_PROCESS = 0x1, |
- EXCLUDE_PROCESS_OWNED_BY_CURRENT_USER = 0x2, |
- EXCLUDE_PROCESS_OWNED_BY_SYSTEM = 0x4, |
- INCLUDE_ONLY_PROCESS_OWNED_BY_USER = 0x08, |
- EXCLUDE_PROCESS_COMMAND_LINE_CONTAINING_STRING = 0x10, |
- INCLUDE_PROCESS_COMMAND_LINE_CONTAINING_STRING = 0x20, |
- EXCLUDE_PARENT_PROCESS = 0x40, |
-}; |
- |
-// Process info used in finding descendent processes. |
-struct ProcessInfo { |
- uint32 process_id; |
- uint32 parent_id; |
-#if !SHIPPING |
- CString exe_file; |
-#endif |
-}; |
- |
-// Process class |
-class Process { |
- public: |
- // Constructor |
- // Init the process object with the executable name |
- // and if known the window class name of the process. |
- // If window_class_name is known it will be easy |
- // to stop the process just by sending messages to |
- // a window. |
- // TODO(omaha3): window_class_name is not being used. |
- Process(const TCHAR* name, const TCHAR* window_class_name); |
- |
- // Constructor. |
- // Init the process object with the process id. |
- explicit Process(uint32 process_id); |
- |
- // Destructor |
- virtual ~Process(); |
- |
- // Start the process with some command line params if any. |
- // If a token is provided, it will be used to start |
- // the process in the default desktop of the |
- // token's session. The caller needs to be SYSTEM in |
- // this case. |
- virtual HRESULT Start(const TCHAR* command_line_parameters, |
- HANDLE runas_token); |
- |
- // Restart the process with the old command line params. |
- HRESULT Restart(HANDLE runas_token); |
- |
- // Set shutdown event using in signaling the process watch. |
- void SetShutdownEvent(HANDLE shutdown_event); |
- |
- // Sets the specified priority class to the process. |
- bool SetPriority(uint32 priority_class) const; |
- |
- // Check if the process is running. |
- bool Running() const; |
- |
- // Create a job and assign the process to it. |
- HANDLE AssignToJob(); |
- |
- // Wait some time till the process finishes. |
- bool WaitUntilDead(uint32 timeout_msec); |
- |
- // Wait some time till the process and all its descendent processes finish. |
- bool WaitUntilAllDead(HANDLE job, |
- uint32 timeout_msec, |
- const TCHAR* path_to_exclude, |
- uint32* exit_code); |
- |
- // Wait until process is dead or a windows message arrives. For use in a |
- // message loop while waiting. |
- HRESULT WaitUntilDeadOrInterrupt(uint32 msec); |
- // Return values include CI_S_PROCESSWAIT_DEAD, CI_S_PROCESSWAIT_TIMEOUT, |
- // CI_S_PROCESSWAIT_MESSAGE. |
- |
-#if !SHIPPING |
- CString GetDebugInfo() const; |
-#endif |
- |
- // Return the process ID. |
- uint32 GetId() const; |
- |
- // Return a readable representation of the process's name. |
- const TCHAR *GetName() const; |
- |
- // Get win32 handle to process. |
- HANDLE GetHandle() const; |
- |
- // Get process exit code. |
- bool GetExitCode(uint32* exit_code) const; |
- |
- // can we kill the process via terminating |
- // some processes are not safe to terminate. |
- virtual bool IsTerminationAllowed() const; |
- |
- // Second, more rude method to stop the process. window_class_name was |
- // not given or CloseWithMessage didn't succeed. |
- bool Terminate(uint32 wait_for_terminate_msec); |
- |
- // Gets the parent process id. |
- HRESULT GetParentProcessId(uint32* parent_pid); |
- |
- // Try to get a descendant process. Return process id if found. |
- uint32 GetDescendantProcess(HANDLE job, |
- bool child_only, |
- bool sole_descedent, |
- const TCHAR* search_name, |
- const TCHAR* path_to_exclude); |
- |
- // Dynamically links and calls ::IsProcessInJob() in kernel32.dll. |
- static BOOL IsProcessInJob(HANDLE process_handle, |
- HANDLE job_handle, |
- PBOOL result); |
- |
- // Try to get all matching descendant processes. |
- HRESULT GetAllDescendantProcesses( |
- HANDLE job, |
- bool child_only, |
- const TCHAR* search_name, |
- const TCHAR* path_to_exclude, |
- std::vector<ProcessInfo>* descendant_proc_ids); |
- |
- // Finds the processes based on passed criteria. |
- static HRESULT FindProcesses(uint32 exclude_mask, |
- const TCHAR* search_name, |
- bool search_main_executable_only, |
- std::vector<uint32>* process_ids_found); |
- |
- // Find processes which loads the specified exe/dll. Uses the user_sid only |
- // if the INCLUDE_ONLY_PROCESS_OWNED_BY_USER flag has been set. |
- // The command_line is only used when |
- // EXCLUDE_PROCESS_COMMAND_LINE_CONTAINING_STRING is set. |
- static HRESULT FindProcesses(uint32 exclude_mask, |
- const TCHAR* search_name, |
- bool search_main_executable_only, |
- const CString& user_sid, |
- const std::vector<CString>& command_line, |
- std::vector<uint32>* process_ids_found); |
- |
- // Find processes with the specified criteria running in specific session. |
- static HRESULT FindProcessesInSession(DWORD session_id, |
- uint32 exclude_mask, |
- const TCHAR* search_name, |
- bool search_main_executable_only, |
- const CString& user_sid, |
- const std::vector<CString>& cmd_lines, |
- std::vector<uint32>* process_ids_found); |
- |
- // Is the process using the specified exe/dll. |
- static bool IsProcessUsingExeOrDll(uint32 process_id, |
- const TCHAR* search_name, |
- bool search_main_executable_only); |
- |
- // Obtain the process ID from a hProcess HANDLE. |
- static ULONG GetProcessIdFromHandle(HANDLE hProcess); |
- |
- // Get the fully qualified path of the executable file for a process. |
- static HRESULT GetExecutablePath(uint32 process_id, CString *exe_path); |
- |
- // Get the command line of a process. |
- static HRESULT GetCommandLine(uint32 process_id, CString* cmd_line); |
- |
- // Get the process owner. |
- static HRESULT GetProcessOwner(uint32 pid, CString* owner_sid); |
- |
- // Creates an impersonation token for the user running process_id. |
- // The caller is responsible for closing the returned handle. |
- static HRESULT GetImpersonationToken(DWORD process_id, HANDLE* user_token); |
- |
- // Returns user token handles for the users currently running the named task. |
- // maximum_users specifies the maximun number of handles to be retured. |
- // The actual number filled is returned. |
- static HRESULT GetUsersOfProcesses(const TCHAR* task_name, |
- int maximum_users, |
- scoped_handle users[], |
- int* number_of_users); |
- |
- // Gets the on disk path from where the process image is loaded. |
- static HRESULT GetImagePath(const CString& process_name, |
- const CString& user_sid, |
- CString* path); |
- |
- // Returns if the process is running under WOW64. |
- static bool IsWow64(uint32 pid); |
- |
- public: |
- // How many times the process can be restarted in case it crashes. |
- virtual uint32 GetMaxNumberOfRestarts() const; |
- |
- // Maximum amount of memory process is allowed to use before it's killed. |
- // Default of 0 means unlimited. |
- virtual uint32 GetMaxMemory() const; |
- |
- // Have we exceeded the number of maximum restarting. |
- bool AllowedToRestart() const; |
- |
- // In case of crash, how soon to restart. |
- virtual uint32 GetRestartInterval() const; |
- |
- // The idea is the following. Each process has maximum number of restarts. |
- // As soon as the process reaches that number of restarts in should no longer |
- // be restarted unless the time window in which the process was crashing is |
- // more than the value returned by this function. For example: |
- // Process X returns 3 from the function GetMaxNumberOfRestarts. |
- // The same process returns 30*1000*60 (30 minutes) from |
- // GetTimeWindowForCrashes if process X crashed more than 3 times in 30 |
- // minutes it will not be restarted. if it took more than 30 minutes for |
- // process X to crash more than 3 times - internal counters for number of |
- // crashes will be reset and the process will be happily restarted. |
- // Each derived process can override this function to return its own time |
- // window for crashes. |
- // Default implementation returns INFINITE which means that this is not time |
- // based at all, if the process crashed more than the value returned by |
- // GetMaxNumberOfRestarts it will not be restarted no matter how long it took. |
- virtual uint32 GetTimeWindowForCrashes() const; |
- |
- // Sets the main window of all process instances to the foreground. |
- static HRESULT MakeProcessWindowForeground(const CString& executable); |
- |
- private: |
- mutable uint32 number_of_restarts_; |
- CString command_line_; |
- CString command_line_parameters_; |
- CString window_class_name_; |
- CString name_; |
- scoped_process process_; |
- uint32 process_id_; |
- mutable uint32 time_of_start_; |
- mutable uint32 exit_code_; |
- HANDLE shutdown_event_; |
- |
- // Helper function to wait till the process and all its descendent processes |
- // finish. |
- bool InternalWaitUntilAllDead(HANDLE job, |
- uint32 timeout_msec, |
- const TCHAR* path_to_exclude, |
- uint32* exit_code); |
- |
- // Check if the process is running with a specified path. |
- static bool IsProcessRunningWithPath(uint32 process_id, const TCHAR* path); |
- |
- // Checks if the command line of the process has been specified as one to |
- // ignore. |
- static bool IsStringPresentInList(const CString& process_command_line, |
- const std::vector<CString>& list); |
- |
- |
- // Helper function to get long path name. |
- static HRESULT GetLongPathName(const TCHAR* short_name, CString* long_name); |
- |
- // Helper for Process::IsProcessUsingExeOrDll(). Use GetProcessImageFileName |
- // to get the filename, and match against search_name. |
- static bool IsProcImageMatch(HANDLE proc_handle, |
- const TCHAR* search_name, |
- bool is_fully_qualified_name); |
- |
- // Dynamically links and calls ::GetProcessImageFileName() in psapi.dll. |
- static DWORD GetProcessImageFileName(HANDLE proc_handle, |
- LPTSTR image_file, |
- DWORD file_size); |
- |
- // Helper for Process::IsProcessUsingExeOrDll(). |
- // Is there a match between the module and the specified exe/dll? |
- static bool IsModuleMatchingExeOrDll(const TCHAR* module_name, |
- const TCHAR* search_name, |
- bool is_fully_qualified_name); |
- |
-#if !SHIPPING |
- CString debug_info_; |
-#endif |
- DISALLOW_EVIL_CONSTRUCTORS(Process); |
-}; |
- |
-} // namespace omaha |
- |
-#endif // OMAHA_BASE_PROCESS_H_ |