process_handle.h revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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
18namespace 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)
24typedef HANDLE ProcessHandle;
25typedef DWORD ProcessId;
26typedef HANDLE UserTokenHandle;
27const ProcessHandle kNullProcessHandle = NULL;
28const ProcessId kNullProcessId = 0;
29#elif defined(OS_POSIX)
30// On POSIX, our ProcessHandle will just be the PID.
31typedef pid_t ProcessHandle;
32typedef pid_t ProcessId;
33const ProcessHandle kNullProcessHandle = 0;
34const ProcessId kNullProcessId = 0;
35#endif  // defined(OS_WIN)
36
37// Returns the id of the current process.
38BASE_EXPORT ProcessId GetCurrentProcId();
39
40// Returns the ProcessHandle of the current process.
41BASE_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.
45BASE_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.
53BASE_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|.
58BASE_EXPORT bool OpenProcessHandleWithAccess(ProcessId pid,
59                                             uint32 access_flags,
60                                             ProcessHandle* handle);
61
62// Closes the process handle opened by OpenProcessHandle.
63BASE_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.
68BASE_EXPORT ProcessId GetProcId(ProcessHandle process);
69
70#if defined(OS_WIN)
71enum 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.
80BASE_EXPORT bool GetProcessIntegrityLevel(ProcessHandle process,
81                                          IntegrityLevel* level);
82#endif
83
84#if defined(OS_POSIX)
85// Returns the path to the executable of the given process.
86BASE_EXPORT FilePath GetProcessExecutablePath(ProcessHandle process);
87
88// Returns the ID for the parent of the given process.
89BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process);
90#endif
91
92}  // namespace base
93
94#endif  // BASE_PROCESS_PROCESS_HANDLE_H_
95