• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef BASE_PROCESS_PROCESS_HANDLE_H_
6 #define BASE_PROCESS_PROCESS_HANDLE_H_
7 
8 #include "base/base_export.h"
9 #include "base/basictypes.h"
10 #include "base/files/file_path.h"
11 #include "build/build_config.h"
12 
13 #include <sys/types.h>
14 #if defined(OS_WIN)
15 #include <windows.h>
16 #endif
17 
18 namespace base {
19 
20 // ProcessHandle is a platform specific type which represents the underlying OS
21 // handle to a process.
22 // ProcessId is a number which identifies the process in the OS.
23 #if defined(OS_WIN)
24 typedef HANDLE ProcessHandle;
25 typedef DWORD ProcessId;
26 typedef HANDLE UserTokenHandle;
27 const ProcessHandle kNullProcessHandle = NULL;
28 const ProcessId kNullProcessId = 0;
29 #elif defined(OS_POSIX)
30 // On POSIX, our ProcessHandle will just be the PID.
31 typedef pid_t ProcessHandle;
32 typedef pid_t ProcessId;
33 const ProcessHandle kNullProcessHandle = 0;
34 const ProcessId kNullProcessId = 0;
35 #endif  // defined(OS_WIN)
36 
37 // Returns the id of the current process.
38 BASE_EXPORT ProcessId GetCurrentProcId();
39 
40 // Returns the ProcessHandle of the current process.
41 BASE_EXPORT ProcessHandle GetCurrentProcessHandle();
42 
43 // Converts a PID to a process handle. This handle must be closed by
44 // CloseProcessHandle when you are done with it. Returns true on success.
45 BASE_EXPORT bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle);
46 
47 // Converts a PID to a process handle. On Windows the handle is opened
48 // with more access rights and must only be used by trusted code.
49 // You have to close returned handle using CloseProcessHandle. Returns true
50 // on success.
51 // TODO(sanjeevr): Replace all calls to OpenPrivilegedProcessHandle with the
52 // more specific OpenProcessHandleWithAccess method and delete this.
53 BASE_EXPORT bool OpenPrivilegedProcessHandle(ProcessId pid,
54                                              ProcessHandle* handle);
55 
56 // Converts a PID to a process handle using the desired access flags. Use a
57 // combination of the kProcessAccess* flags defined above for |access_flags|.
58 BASE_EXPORT bool OpenProcessHandleWithAccess(ProcessId pid,
59                                              uint32 access_flags,
60                                              ProcessHandle* handle);
61 
62 // Closes the process handle opened by OpenProcessHandle.
63 BASE_EXPORT void CloseProcessHandle(ProcessHandle process);
64 
65 // Returns the unique ID for the specified process. This is functionally the
66 // same as Windows' GetProcessId(), but works on versions of Windows before
67 // Win XP SP1 as well.
68 BASE_EXPORT ProcessId GetProcId(ProcessHandle process);
69 
70 #if defined(OS_WIN)
71 enum IntegrityLevel {
72   INTEGRITY_UNKNOWN,
73   LOW_INTEGRITY,
74   MEDIUM_INTEGRITY,
75   HIGH_INTEGRITY,
76 };
77 // Determine the integrity level of the specified process. Returns false
78 // if the system does not support integrity levels (pre-Vista) or in the case
79 // of an underlying system failure.
80 BASE_EXPORT bool GetProcessIntegrityLevel(ProcessHandle process,
81                                           IntegrityLevel* level);
82 #endif
83 
84 #if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
85 // Returns the path to the executable of the given process.
86 BASE_EXPORT FilePath GetProcessExecutablePath(ProcessHandle process);
87 #endif
88 
89 #if defined(OS_POSIX)
90 // Returns the ID for the parent of the given process.
91 BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process);
92 #endif
93 
94 }  // namespace base
95 
96 #endif  // BASE_PROCESS_PROCESS_HANDLE_H_
97