17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef BASE_PROCESS_PROCESS_HANDLE_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define BASE_PROCESS_PROCESS_HANDLE_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/base_export.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/basictypes.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/file_path.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "build/build_config.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <sys/types.h>
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_WIN)
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <windows.h>
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace base {
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// ProcessHandle is a platform specific type which represents the underlying OS
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// handle to a process.
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// ProcessId is a number which identifies the process in the OS.
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_WIN)
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtypedef HANDLE ProcessHandle;
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtypedef DWORD ProcessId;
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtypedef HANDLE UserTokenHandle;
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst ProcessHandle kNullProcessHandle = NULL;
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst ProcessId kNullProcessId = 0;
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#elif defined(OS_POSIX)
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// On POSIX, our ProcessHandle will just be the PID.
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtypedef pid_t ProcessHandle;
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtypedef pid_t ProcessId;
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst ProcessHandle kNullProcessHandle = 0;
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst ProcessId kNullProcessId = 0;
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // defined(OS_WIN)
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Returns the id of the current process.
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT ProcessId GetCurrentProcId();
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Returns the ProcessHandle of the current process.
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT ProcessHandle GetCurrentProcessHandle();
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Converts a PID to a process handle. This handle must be closed by
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// CloseProcessHandle when you are done with it. Returns true on success.
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle);
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Converts a PID to a process handle. On Windows the handle is opened
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// with more access rights and must only be used by trusted code.
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// You have to close returned handle using CloseProcessHandle. Returns true
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// on success.
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// TODO(sanjeevr): Replace all calls to OpenPrivilegedProcessHandle with the
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// more specific OpenProcessHandleWithAccess method and delete this.
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT bool OpenPrivilegedProcessHandle(ProcessId pid,
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                             ProcessHandle* handle);
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Converts a PID to a process handle using the desired access flags. Use a
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// combination of the kProcessAccess* flags defined above for |access_flags|.
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT bool OpenProcessHandleWithAccess(ProcessId pid,
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                             uint32 access_flags,
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                             ProcessHandle* handle);
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Closes the process handle opened by OpenProcessHandle.
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT void CloseProcessHandle(ProcessHandle process);
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Returns the unique ID for the specified process. This is functionally the
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// same as Windows' GetProcessId(), but works on versions of Windows before
677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Win XP SP1 as well.
687dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT ProcessId GetProcId(ProcessHandle process);
697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_WIN)
717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochenum IntegrityLevel {
727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  INTEGRITY_UNKNOWN,
737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  LOW_INTEGRITY,
747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  MEDIUM_INTEGRITY,
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  HIGH_INTEGRITY,
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Determine the integrity level of the specified process. Returns false
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// if the system does not support integrity levels (pre-Vista) or in the case
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// of an underlying system failure.
807dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT bool GetProcessIntegrityLevel(ProcessHandle process,
817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                          IntegrityLevel* level);
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#if defined(OS_POSIX)
857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Returns the path to the executable of the given process.
867dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT FilePath GetProcessExecutablePath(ProcessHandle process);
877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Returns the ID for the parent of the given process.
897dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_EXPORT ProcessId GetParentProcessId(ProcessHandle process);
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace base
937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // BASE_PROCESS_PROCESS_HANDLE_H_
95