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