Home | History | Annotate | Download | only in memory
      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