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