| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_MEMORY_SCOPED_OPEN_PROCESS_H_ |
| #define BASE_MEMORY_SCOPED_OPEN_PROCESS_H_ |
| |
| #include "base/process.h" |
| #include "base/process_util.h" |
| |
| namespace base { |
| |
| // A class that opens a process from its process id and closes it when the |
| // instance goes out of scope. |
| class ScopedOpenProcess { |
| public: |
| ScopedOpenProcess() : handle_(kNullProcessHandle) { |
| } |
| |
| // Automatically close the process. |
| ~ScopedOpenProcess() { |
| Close(); |
| } |
| |
| // Open a new process by pid. Closes any previously opened process (even if |
| // opening the new one fails). |
| bool Open(ProcessId pid) { |
| Close(); |
| return OpenProcessHandle(pid, &handle_); |
| } |
| |
| // Close the previously opened process. |
| void Close() { |
| if (handle_ == kNullProcessHandle) |
| return; |
| |
| CloseProcessHandle(handle_); |
| handle_ = kNullProcessHandle; |
| } |
| |
| ProcessHandle handle() const { return handle_; } |
| |
| private: |
| ProcessHandle handle_; |
| DISALLOW_COPY_AND_ASSIGN(ScopedOpenProcess); |
| }; |
| } // namespace base |
| |
| #endif // BASE_MEMORY_SCOPED_OPEN_PROCESS_H_ |