1// Copyright (c) 2011 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_MEMORY_SCOPED_OPEN_PROCESS_H_ 6#define BASE_MEMORY_SCOPED_OPEN_PROCESS_H_ 7 8#include "base/process/process_handle.h" 9 10namespace base { 11 12// A class that opens a process from its process id and closes it when the 13// instance goes out of scope. 14class ScopedOpenProcess { 15 public: 16 ScopedOpenProcess() : handle_(kNullProcessHandle) { 17 } 18 19 // Automatically close the process. 20 ~ScopedOpenProcess() { 21 Close(); 22 } 23 24 // Open a new process by pid. Closes any previously opened process (even if 25 // opening the new one fails). 26 bool Open(ProcessId pid) { 27 Close(); 28 return OpenProcessHandle(pid, &handle_); 29 } 30 31 // Close the previously opened process. 32 void Close() { 33 if (handle_ == kNullProcessHandle) 34 return; 35 36 CloseProcessHandle(handle_); 37 handle_ = kNullProcessHandle; 38 } 39 40 ProcessHandle handle() const { return handle_; } 41 42 private: 43 ProcessHandle handle_; 44 DISALLOW_COPY_AND_ASSIGN(ScopedOpenProcess); 45}; 46} // namespace base 47 48#endif // BASE_MEMORY_SCOPED_OPEN_PROCESS_H_ 49