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 10 namespace base { 11 12 // A class that opens a process from its process id and closes it when the 13 // instance goes out of scope. 14 class 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