Home | History | Annotate | Download | only in process
      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_POSIX)
     85 // Returns the path to the executable of the given process.
     86 BASE_EXPORT FilePath GetProcessExecutablePath(ProcessHandle process);
     87 
     88 // Returns the ID for the parent of the given process.
     89 BASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process);
     90 #endif
     91 
     92 }  // namespace base
     93 
     94 #endif  // BASE_PROCESS_PROCESS_HANDLE_H_
     95