| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_PROCESS_PROCESS_HANDLE_H_ |
| #define BASE_PROCESS_PROCESS_HANDLE_H_ |
| |
| #include "base/base_export.h" |
| #include "base/basictypes.h" |
| #include "base/files/file_path.h" |
| #include "build/build_config.h" |
| |
| #include <sys/types.h> |
| #if defined(OS_WIN) |
| #include <windows.h> |
| #endif |
| |
| namespace base { |
| |
| // ProcessHandle is a platform specific type which represents the underlying OS |
| // handle to a process. |
| // ProcessId is a number which identifies the process in the OS. |
| #if defined(OS_WIN) |
| typedef HANDLE ProcessHandle; |
| typedef DWORD ProcessId; |
| typedef HANDLE UserTokenHandle; |
| const ProcessHandle kNullProcessHandle = NULL; |
| const ProcessId kNullProcessId = 0; |
| #elif defined(OS_POSIX) |
| // On POSIX, our ProcessHandle will just be the PID. |
| typedef pid_t ProcessHandle; |
| typedef pid_t ProcessId; |
| const ProcessHandle kNullProcessHandle = 0; |
| const ProcessId kNullProcessId = 0; |
| #endif // defined(OS_WIN) |
| |
| // Returns the id of the current process. |
| BASE_EXPORT ProcessId GetCurrentProcId(); |
| |
| // Returns the ProcessHandle of the current process. |
| BASE_EXPORT ProcessHandle GetCurrentProcessHandle(); |
| |
| // Converts a PID to a process handle. This handle must be closed by |
| // CloseProcessHandle when you are done with it. Returns true on success. |
| BASE_EXPORT bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle); |
| |
| // Converts a PID to a process handle. On Windows the handle is opened |
| // with more access rights and must only be used by trusted code. |
| // You have to close returned handle using CloseProcessHandle. Returns true |
| // on success. |
| // TODO(sanjeevr): Replace all calls to OpenPrivilegedProcessHandle with the |
| // more specific OpenProcessHandleWithAccess method and delete this. |
| BASE_EXPORT bool OpenPrivilegedProcessHandle(ProcessId pid, |
| ProcessHandle* handle); |
| |
| // Converts a PID to a process handle using the desired access flags. Use a |
| // combination of the kProcessAccess* flags defined above for |access_flags|. |
| BASE_EXPORT bool OpenProcessHandleWithAccess(ProcessId pid, |
| uint32 access_flags, |
| ProcessHandle* handle); |
| |
| // Closes the process handle opened by OpenProcessHandle. |
| BASE_EXPORT void CloseProcessHandle(ProcessHandle process); |
| |
| // Returns the unique ID for the specified process. This is functionally the |
| // same as Windows' GetProcessId(), but works on versions of Windows before |
| // Win XP SP1 as well. |
| BASE_EXPORT ProcessId GetProcId(ProcessHandle process); |
| |
| #if defined(OS_WIN) |
| enum IntegrityLevel { |
| INTEGRITY_UNKNOWN, |
| LOW_INTEGRITY, |
| MEDIUM_INTEGRITY, |
| HIGH_INTEGRITY, |
| }; |
| // Determine the integrity level of the specified process. Returns false |
| // if the system does not support integrity levels (pre-Vista) or in the case |
| // of an underlying system failure. |
| BASE_EXPORT bool GetProcessIntegrityLevel(ProcessHandle process, |
| IntegrityLevel* level); |
| #endif |
| |
| #if defined(OS_POSIX) |
| // Returns the path to the executable of the given process. |
| BASE_EXPORT FilePath GetProcessExecutablePath(ProcessHandle process); |
| |
| // Returns the ID for the parent of the given process. |
| BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process); |
| #endif |
| |
| } // namespace base |
| |
| #endif // BASE_PROCESS_PROCESS_HANDLE_H_ |